Skip to content

Commit

Permalink
Merge pull request #3 from WildCodeSchool/feature/entities
Browse files Browse the repository at this point in the history
Ajout entities
  • Loading branch information
Vicente-avdn authored Feb 12, 2025
2 parents 9a41c46 + 26eb8f8 commit f6926b7
Show file tree
Hide file tree
Showing 11 changed files with 971 additions and 14 deletions.
756 changes: 743 additions & 13 deletions backend/package-lock.json

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
"dependencies": {
"@apollo/server": "^4.11.3",
"graphql": "^16.10.0",
"ts-node-dev": "^2.0.0"
"ts-node-dev": "^2.0.0",
"typeorm": "^0.3.20"
},
"devDependencies": {
"@types/node": "^22.13.1",
Expand Down
22 changes: 22 additions & 0 deletions backend/src/entities/Comment.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { BaseEntity, Column, CreateDateColumn, Entity, ManyToMany, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
import { User } from "@/entities/User";
import { Resource } from "@/entities/Resource";

@Entity()
export class Comment extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;

@ManyToMany(() => User)
user: User;

@ManyToOne(() => Resource)
resource: Resource;

@Column(
{ type: "longtext" })
content: string;

@CreateDateColumn()
createdAt: Date;
}
15 changes: 15 additions & 0 deletions backend/src/entities/Contact.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { BaseEntity, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
import { User } from "@/entities/User";

@Entity()
export class Contact extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;

@ManyToOne(() => User)
sourceUser: User;

@ManyToOne(() => User)
targetUser: User;

}
15 changes: 15 additions & 0 deletions backend/src/entities/Like.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { BaseEntity, Entity, ManyToMany, OneToOne, PrimaryGeneratedColumn } from 'typeorm';
import { User } from '@/entities/User';
import { Resource } from '@/entities/Resource';

@Entity()
export class Comment extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;

@ManyToMany(() => User)
user: User;

@OneToOne(() => Resource)
resource: Resource;
}
32 changes: 32 additions & 0 deletions backend/src/entities/Report.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm';
import { User } from '@/entities/User';
import { Resource } from '@/entities/Resource';

export enum Reason {
INNAPROPRIATE = 'inappropriate content',
HARASSMENT = 'harassment',
SPAM = 'spam',
OTHER = 'other',
NONE = 'none',
}

@Entity()
export class Comment extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;

@Column()
user: User;

@Column()
resource: Resource;

@Column({ type: 'longtext', nullable: true })
content: string;

@Column({ type: 'enum', enum: Reason, default: Reason.NONE })
reason: Reason;

@CreateDateColumn()
createdAt: Date;
}
67 changes: 67 additions & 0 deletions backend/src/entities/Resource.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import {
BaseEntity,
Column,
CreateDateColumn,
Entity,
ManyToMany,
OneToOne,
PrimaryGeneratedColumn,
} from 'typeorm';
import { User } from '@/entities/User';

export enum FileVisibility {
PRIVATE = 'private',
PUBLIC = 'public',
}

@Entity()
export class Resource extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;

@OneToOne(() => User)
user: User;

@Column({
type: 'varchar',
length: 150,
unique: true,
})
name: string;

@Column({
type: 'varchar',
length: 100,
})
path: string;

@Column({
type: 'varchar',
length: 255,
unique: true,
})
url: string;

@Column({
type: 'enum',
enum: FileVisibility,
default: FileVisibility.PRIVATE,
})
visibility: FileVisibility;

@Column({
type: 'varchar',
length: 320,
nullable: true
})
description: string;

@ManyToMany(() => User, (User) => User.resourceAccess)
usersWithAccess: User[];

@Column({ nullable: true })
expireAt: Date;

@CreateDateColumn()
createdAt: Date;
}
13 changes: 13 additions & 0 deletions backend/src/entities/Subscribtion.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from "typeorm";

@Entity()
export class Subscribtion extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;

@CreateDateColumn()
paidAt: Date;

@Column()
endAt: Date;
}
53 changes: 53 additions & 0 deletions backend/src/entities/User.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import {
BaseEntity,
Column,
CreateDateColumn,
Entity,
ManyToMany,
OneToOne,
PrimaryGeneratedColumn,
} from 'typeorm';
import { Resource } from '@/entities/Resource';

export enum UserRole {
USER = 'user',
ADMIN = 'admin',
}

@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;

@Column({
type: 'varchar',
length: 320,
unique: true,
})
email: string;

@Column({
type: 'varchar',
length: 150,
})
password: string;

@CreateDateColumn()
lastLoggedAt: Date;

@Column({
type: 'enum',
enum: UserRole,
default: UserRole.USER,
})
role: UserRole;

@ManyToMany(() => Resource, (Resource) => Resource.usersWithAccess, { nullable: true })
resourceAccess: Resource[];

@OneToOne(() => User, (user) => user.subscription, { nullable: true })
subscription: User;

@CreateDateColumn()
createdAt: Date;
}
3 changes: 3 additions & 0 deletions backend/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"],
},
"target": "es2017",
"module": "commonjs",
"lib": ["dom", "es6", "es2017", "esnext.asynciterable"],
Expand Down
6 changes: 6 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit f6926b7

Please sign in to comment.