Files
SkinbaseNova/.copilot/favourites_artworks.md
2026-02-08 10:42:01 +01:00

3.6 KiB
Raw Permalink Blame History

1 Final SQL New Favorites Table (Artwork-only)

Table name: user_favorites Scope: users ↔ artworks Engine: InnoDB Charset: utf8mb4

CREATE TABLE user_favorites (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

  user_id BIGINT UNSIGNED NOT NULL,
  artwork_id BIGINT UNSIGNED NOT NULL,

  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

  UNIQUE KEY uniq_user_artwork (user_id, artwork_id),
  KEY idx_artwork (artwork_id),
  KEY idx_user_created (user_id, created_at),

  CONSTRAINT fk_user_favorites_user
    FOREIGN KEY (user_id) REFERENCES users(id)
    ON DELETE CASCADE,

  CONSTRAINT fk_user_favorites_artwork
    FOREIGN KEY (artwork_id) REFERENCES artworks(id)
    ON DELETE CASCADE
) ENGINE=InnoDB
  DEFAULT CHARSET=utf8mb4
  COLLATE=utf8mb4_unicode_ci;

This is production-ready and matches everything we discussed:

  • no legacy fields
  • no duplication
  • proper constraints
  • fast queries

2 VS Code Agent Markdown (Laravel 12 Migration Prompt)

Save this as for example:

.vscode/agents/laravel-user-favorites-migration.md

or

.cursor/rules/laravel-user-favorites.md

# Laravel 12  User Favorites Migration & Model

## Context
We are migrating legacy "favourites" functionality into a clean, modern Laravel 12 system.
Each user can add artworks to their favorites list.
This is a many-to-many relationship between users and artworks.

Legacy table MUST NOT be reused.

---

## Goal
Create a Laravel 12 database migration and Eloquent model for a new table named:

user_favorites


This table stores **which user favorited which artwork**, with a timestamp.

---

## Database Requirements

### Table: user_favorites

| Column | Type | Notes |
|------|------|------|
| id | BIGINT UNSIGNED | Primary key |
| user_id | BIGINT UNSIGNED | FK → users.id |
| artwork_id | BIGINT UNSIGNED | FK → artworks.id |
| created_at | TIMESTAMP | When artwork was favorited |

### Constraints & Indexes

- UNIQUE (user_id, artwork_id)  
  → prevents duplicate favorites

- INDEX artwork_id  
  → fast favorite count per artwork

- INDEX (user_id, created_at)  
  → fast "my favorites" queries

### Foreign Keys

- user_id → users.id (ON DELETE CASCADE)
- artwork_id → artworks.id (ON DELETE CASCADE)

### Engine & Charset

- Engine: InnoDB
- Charset: utf8mb4
- Collation: utf8mb4_unicode_ci

---

## Laravel Migration Requirements

- Use `Schema::create`
- Use `foreignId()->constrained()->cascadeOnDelete()`
- Use `timestamps()` **ONLY if created_at is needed**
  (do NOT add updated_at)

- Add explicit indexes and unique constraints

---

## Laravel Model Requirements

### Model: UserFavorite

- Table: `user_favorites`
- `$timestamps = false` (created_at handled manually or via DB default)
- Fillable:
  - user_id
  - artwork_id
  - created_at

### Relationships

```php
UserFavorite belongsTo User
UserFavorite belongsTo Artwork

Additional Notes

  • This table is interaction-based, NOT content-based
  • Do NOT store favorite counts here
  • Favorite counts will be aggregated separately (Redis or statistics table)
  • This table must be lean and write-optimized

Deliverables

  • Migration file for Laravel 12
  • Eloquent model UserFavorite
  • Proper naming and clean schema
  • No legacy fields, no polymorphic logic

Generate clean, production-quality code.


---

## 3⃣ How to Use This in VS Code (Quick Steps)

1. Paste markdown into `.vscode/agents/` or `.cursor/rules/`
2. Open VS Code
3. Ask your AI agent:
   > “Create Laravel 12 migration and model based on this document”
4. Review generated migration
5. Run:
```bash
php artisan migrate