# ShopDB - Claude Code Instructions

## Project Overview

ShopDB is a Classic ASP/VBScript web application for managing manufacturing shop floor infrastructure at GE Aerospace. It tracks machines, PCs, printers, and network devices.

## Technology Stack

- **Backend:** Classic ASP (VBScript)
- **Database:** MySQL 5.6
- **Frontend:** Bootstrap 4.6, jQuery, DataTables
- **Server:** IIS on Windows VM (192.168.122.151:8080)
- **Version Control:** Gitea (localhost:3000)

## Key Architecture

### Database Schema (Phase 2 - Current)

```
machines table (unified)
├── Equipment (machinetypeid 1-24, pctypeid IS NULL)
├── PCs (machinetypeid 33-35, pctypeid IS NOT NULL)
└── Network Devices (machinetypeid 16-20)

printers table (separate)
communications table (all network interfaces)
machinerelationships table (PC↔equipment links)
```

### Key Queries

```sql
-- All PCs
SELECT * FROM machines WHERE pctypeid IS NOT NULL;

-- All Equipment
SELECT * FROM machines WHERE pctypeid IS NULL AND machinetypeid < 16;

-- Network devices
SELECT * FROM machines WHERE machinetypeid IN (16,17,18,19,20);
```

## File Structure

```
/home/camp/projects/windows/shopdb/
├── *.asp              # Main ASP pages
├── api.asp            # REST API for PowerShell
├── includes/          # Shared includes (header, footer, sql)
├── js/                # JavaScript files
├── css/               # Stylesheets
├── images/            # Images and icons
├── docs/              # Documentation
├── sql/               # SQL scripts
│   ├── migration_phase1/
│   ├── migration_phase2/
│   └── migration_phase3/
└── logs/              # Application logs
```

## Log Locations

**IIS Logs (Windows VM):** `/home/camp/projects/windows/logs/shopdb/`
- Format: `ex[YYMMDD].log` (e.g., `ex251201.log` for Dec 1, 2025)
- These are synced from the Windows VM via Samba share
- Contains HTTP request logs with status codes and error messages

**API Logs:** Check `logs/` folder in shopdb directory on IIS

## Coding Standards

### ASP/VBScript

1. **Always use parameterized queries** - Never concatenate user input into SQL
2. **Use HTMLEncode for output** - Prevent XSS attacks
3. **Convert text fields to strings** - Use `& ""` to avoid type mismatch errors
4. **Use Option Explicit** - Declare all variables

### Example Safe Query

```vbscript
Dim cmd, rs
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = objConn
cmd.CommandText = "SELECT * FROM machines WHERE machineid = ?"
cmd.Parameters.Append cmd.CreateParameter("@id", 3, 1, , machineId)
Set rs = cmd.Execute()
```

### Example Safe Output

```vbscript
' Always convert to string and encode
Dim hostname
hostname = ""
If NOT IsNull(rs("hostname")) Then hostname = rs("hostname") & ""
Response.Write(Server.HTMLEncode(hostname))
```

## Common Tasks

### Reading Files
- Main pages are in project root (*.asp)
- Includes are in /includes/
- Check docs/ for documentation

### Making Changes
1. Read the file first
2. Use parameterized queries for any SQL
3. Test on dev server (192.168.122.151:8080)
4. Check IIS logs for errors

### Database Access
```bash
docker exec -it dev-mysql mysql -u root -prootpassword shopdb
```

## Important Notes

### VBScript Limitations
- No `IIf()` function - use If-Then-Else instead
- No Try-Catch - use On Error Resume Next carefully
- Strings are 1-indexed, not 0-indexed

### Column Name Gotchas
- `address` not `ipaddress` in communications table
- `machinenotes` not `notes` in machines table
- `machineid` not `pcid` for PCs in machines table

### PC Identification
PCs are in the machines table, identified by:
- `pctypeid IS NOT NULL`
- `machinetypeid IN (33, 34, 35)`

## API Endpoints

**Base URL:** `http://192.168.122.151:8080/api.asp`

| Action | Method | Description |
|--------|--------|-------------|
| updateCompleteAsset | POST | PC data collection |
| getDashboardData | GET | Health check |
| updatePrinterMapping | POST | Printer assignments |

## External Integrations

| Page | Purpose |
|------|---------|
| `printerlookup.asp?ip=x.x.x.x` | Zabbix printer lookup by IP/FQDN |

## Quick Reference

### Start Dev Environment
```bash
~/start-dev-env.sh
~/status-dev-env.sh
```

### Git Commands
```bash
cd /home/camp/projects/windows/shopdb
git status
git add .
git commit -m "message"
git push
```

### Test a Page
```bash
curl -s http://192.168.122.151:8080/pagename.asp | head -50
```
