feat: TypeORM entities — User, Role, SubscriptionPlan, Video, Playlist + relations
This commit is contained in:
46
backend/src/entities/PlaylistShare.ts
Normal file
46
backend/src/entities/PlaylistShare.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import {
|
||||
Entity, PrimaryGeneratedColumn, Column,
|
||||
ManyToOne, JoinColumn, CreateDateColumn, UpdateDateColumn,
|
||||
} from "typeorm";
|
||||
import { Playlist } from "./Playlist";
|
||||
import { User } from "./User";
|
||||
|
||||
export type SharePermission = "view" | "edit";
|
||||
export type ShareStatus = "pending" | "active" | "revoked";
|
||||
|
||||
@Entity("playlist_shares")
|
||||
export class PlaylistShare {
|
||||
@PrimaryGeneratedColumn("uuid")
|
||||
id!: string;
|
||||
|
||||
@Column({ type: "uuid" })
|
||||
playlistId!: string;
|
||||
|
||||
@Column({ type: "uuid" })
|
||||
userId!: string;
|
||||
|
||||
// Permissions gérées par le propriétaire de la playlist
|
||||
@Column({ type: "enum", enum: ["view", "edit"], default: "view" })
|
||||
permission!: SharePermission;
|
||||
|
||||
// Statut géré par le propriétaire :
|
||||
// pending → invitation envoyée, pas encore acceptée
|
||||
// active → invité a accepté
|
||||
// revoked → propriétaire a révoqué l'accès
|
||||
@Column({ type: "enum", enum: ["pending", "active", "revoked"], default: "pending" })
|
||||
status!: ShareStatus;
|
||||
|
||||
@CreateDateColumn()
|
||||
createdAt!: Date;
|
||||
|
||||
@UpdateDateColumn()
|
||||
updatedAt!: Date;
|
||||
|
||||
@ManyToOne(() => Playlist, (playlist) => playlist.shares, { onDelete: "CASCADE" })
|
||||
@JoinColumn({ name: "playlistId" })
|
||||
playlist!: Playlist;
|
||||
|
||||
@ManyToOne(() => User, (user) => user.playlistShares, { onDelete: "CASCADE" })
|
||||
@JoinColumn({ name: "userId" })
|
||||
user!: User;
|
||||
}
|
||||
Reference in New Issue
Block a user