Files
natureinpots_community/subapp.txt
2025-06-11 05:23:52 -05:00

120 lines
4.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

You are ChatGPT, an expert Flask developer. I will upload two ZIP files:
* **plant-scan-main.zip** (the standalone sub-app)
* **natureinpots\_main.zip** (the main app with its utility plugin)
When I upload them, **immediately reply**:
> Got it, ready to review both codebases.
Then, following the exact file structures in those ZIPs, **implement** all of the following changes—listing every modified or new file by its relative path and providing its **complete** updated contents:
---
## 1. FULL-CODE REVIEW
* Scan **every file and every line** in both ZIPs—no exceptions, no assumptions.
* Keep all code in memory to reference original imports, blueprints, models, routes, and templates.
---
## 2. SUB-APP ENHANCEMENTS (Plant Scan)
1. **Authentication & CSRF**
* Add Flask-Login with a `User(id, email, password_hash, created_at)` model.
* Implement **register**, **login**, **logout** routes and templates; protect all forms with CSRF.
* Scope all queries so users only see their own data (`Plant.user_id == current_user.id`, `GrowLog.user_id == current_user.id`).
2. **Image Upload Support**
* Modify plant-create/edit and grow-log forms to accept `<input type="file" multiple name="images">`.
* Save uploads under:
* `static/uploads/<user_id>/<plant_id>/<uuid>.<ext>`
* `static/uploads/<user_id>/growlogs/<plant_id>/<update_id>/<uuid>.<ext>`
* Strip EXIF, record `original_filename` and `uploaded_at` in a `Media` model.
3. **Export My Data**
* Add a login-required `/export` route and button.
* Generate `<username>_export.zip` containing:
* **plants.csv** (headers exactly):
```
plant_id,common_name,scientific_name,genus,vendor_name,price,notes,created_at
```
* **media.csv** (headers exactly):
```
plant_id,image_path,uploaded_at,source_type
```
* **images/** folder mirroring the upload paths.
* A hidden **export\_id** (UUID + timestamp) in a metadata file or CSV header.
* Only include the exporting users records and images; exclude all other assets.
4. **Manual Testing (Sub-App)**
* Register two users; verify isolation of plant and grow-log lists.
* Upload multiple images; confirm storage paths and DB entries.
* Export each user; unzip and verify CSV headers, rows, `images/`, and unique `export_id`.
---
## 3. MAIN-APP utility REFACTOR (“Nature in Pots”)
1. **Web-Based ZIP Upload**
* Change the utility form to accept a `.zip` file.
* On upload, unzip into a temp directory expecting `plants.csv`, `media.csv`, and `images/`.
* If only a CSV is uploaded, process it but skip media.
2. **CSV Header Validation**
* Abort with a clear error if **plants.csv** does not have exactly:
```
plant_id,common_name,scientific_name,genus,vendor_name,price,notes,created_at
```
* Abort if **media.csv** does not have exactly:
```
plant_id,image_path,uploaded_at,source_type
```
3. **Import Logic & Collision Avoidance**
* For each row in `plants.csv`, create a new `Plant`.
* For each row in `media.csv`, locate the file under `images/...`, copy it into the main apps `static/uploads` using a UUID filename if needed to avoid conflicts, and create a `Media` record with `uploaded_at` and `source_type`.
* Read `export_id` and store it in an `ImportBatch(export_id, user_id, imported_at)` table; if the same `export_id` has already been processed for that user, **skip the import** and notify the user.
4. **Ownership Attribution**
* Attribute all imported `Plant` and `Media` entries to **the currently logged-in main-app user**.
5. **Schema & Neo4j**
* Supply defaults for any non-nullable fields missing from `plants.csv`.
* Pass all imported fields (e.g. `vendor_name`) into the existing Neo4j handler when creating/updating nodes.
6. **Manual Testing (utility)**
* As a main-app user, upload the `<username>_export.zip`; confirm no duplicates on re-upload.
* Verify `Plant`, `Media`, and `PlantOwnershipLog` tables contain correct data and timestamps.
* View plant detail pages to ensure images load correctly.
* Inspect Neo4j for the new or updated plant nodes.
---
## 4. DELIVERY & CONSTRAINTS
* For **every** changed or new file, list its **relative path** and include its **entire** file contents.
* **CSV headers must match exactly**—no deviations.
* Use **UUID filenames** to guarantee no file collisions on import.
* All routes and forms must enforce **authentication** and **CSRF**.
* **Only modify** code under `app/` or `plugins/`; **do not delete** any existing files.
Once youve implemented all of the above, provide a summary of the changes and confirm the manual testing results.