Compare commits
4 Commits
5088e0bb2e
...
feat/perso
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a3802454d5 | ||
|
|
ff4d4cf892 | ||
|
|
68f8ca0ca5 | ||
|
|
6e254930b9 |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -127,6 +127,11 @@ dist
|
|||||||
# Stores VSCode versions used for testing VSCode extensions
|
# Stores VSCode versions used for testing VSCode extensions
|
||||||
.vscode-test
|
.vscode-test
|
||||||
|
|
||||||
|
.vscode/*
|
||||||
|
|
||||||
|
!.vscode/extensions.json
|
||||||
|
!.vscode/settings.json
|
||||||
|
|
||||||
# yarn v2
|
# yarn v2
|
||||||
.yarn/cache
|
.yarn/cache
|
||||||
.yarn/unplugged
|
.yarn/unplugged
|
||||||
|
|||||||
16
.vscode/extensions.json
vendored
Normal file
16
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
// See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
|
||||||
|
// Extension identifier format: ${publisher}.${name}. Example: vscode.csharp
|
||||||
|
|
||||||
|
// List of extensions which should be recommended for users of this workspace.
|
||||||
|
"recommendations": [
|
||||||
|
|
||||||
|
],
|
||||||
|
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
|
||||||
|
"unwantedRecommendations": [
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"esbenp.prettier-vscode",
|
||||||
|
"Vue.volar",
|
||||||
|
"atommaterial.a-file-icon-vscode"
|
||||||
|
]
|
||||||
|
}
|
||||||
14
.vscode/settings.json
vendored
Normal file
14
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll.eslint": "explicit"
|
||||||
|
},
|
||||||
|
"js/ts.tsdk.path": "node_modules/typescript/lib",
|
||||||
|
"[typescript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[vue]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
}
|
||||||
|
}
|
||||||
1
package-lock.json
generated
1
package-lock.json
generated
@@ -14449,6 +14449,7 @@
|
|||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"license": "UNLICENSED",
|
"license": "UNLICENSED",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@gim/shared": "*",
|
||||||
"@nestjs/common": "^11.0.1",
|
"@nestjs/common": "^11.0.1",
|
||||||
"@nestjs/config": "^4.0.3",
|
"@nestjs/config": "^4.0.3",
|
||||||
"@nestjs/core": "^11.0.1",
|
"@nestjs/core": "^11.0.1",
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
"test:e2e": "jest --config ./test/jest-e2e.json"
|
"test:e2e": "jest --config ./test/jest-e2e.json"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@gim/shared": "*",
|
||||||
"@nestjs/common": "^11.0.1",
|
"@nestjs/common": "^11.0.1",
|
||||||
"@nestjs/config": "^4.0.3",
|
"@nestjs/config": "^4.0.3",
|
||||||
"@nestjs/core": "^11.0.1",
|
"@nestjs/core": "^11.0.1",
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm';
|
|||||||
import { AppController } from './app.controller';
|
import { AppController } from './app.controller';
|
||||||
import { AppService } from './app.service';
|
import { AppService } from './app.service';
|
||||||
import { UsersModule } from './users/users.module';
|
import { UsersModule } from './users/users.module';
|
||||||
|
import { PersonsModule } from './persons/persons.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -34,6 +35,8 @@ import { UsersModule } from './users/users.module';
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
UsersModule,
|
UsersModule,
|
||||||
|
|
||||||
|
PersonsModule,
|
||||||
],
|
],
|
||||||
controllers: [AppController],
|
controllers: [AppController],
|
||||||
providers: [AppService],
|
providers: [AppService],
|
||||||
|
|||||||
33
packages/backend/src/persons/dto/create-person.dto.ts
Normal file
33
packages/backend/src/persons/dto/create-person.dto.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import {
|
||||||
|
IsString,
|
||||||
|
IsNotEmpty,
|
||||||
|
IsDateString,
|
||||||
|
IsBoolean,
|
||||||
|
IsOptional,
|
||||||
|
} from 'class-validator';
|
||||||
|
import { ICreatePersonneDTO } from '@gim/shared';
|
||||||
|
|
||||||
|
export class CreatePersonDto implements ICreatePersonneDTO {
|
||||||
|
@IsString()
|
||||||
|
@IsNotEmpty()
|
||||||
|
numeroLicence!: string;
|
||||||
|
|
||||||
|
@IsString()
|
||||||
|
@IsNotEmpty()
|
||||||
|
nom!: string;
|
||||||
|
|
||||||
|
@IsString()
|
||||||
|
@IsNotEmpty()
|
||||||
|
prenom!: string;
|
||||||
|
|
||||||
|
@IsDateString()
|
||||||
|
dateNaissance!: string;
|
||||||
|
|
||||||
|
@IsBoolean()
|
||||||
|
@IsOptional()
|
||||||
|
surclasse!: boolean;
|
||||||
|
|
||||||
|
@IsBoolean()
|
||||||
|
@IsOptional()
|
||||||
|
coach!: boolean;
|
||||||
|
}
|
||||||
4
packages/backend/src/persons/dto/update-person.dto.ts
Normal file
4
packages/backend/src/persons/dto/update-person.dto.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
import { PartialType } from '@nestjs/mapped-types';
|
||||||
|
import { CreatePersonDto } from './create-person.dto';
|
||||||
|
|
||||||
|
export class UpdatePersonDto extends PartialType(CreatePersonDto) {}
|
||||||
26
packages/backend/src/persons/entities/person.entity.ts
Normal file
26
packages/backend/src/persons/entities/person.entity.ts
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
|
||||||
|
import { IPersonne } from '@gim/shared';
|
||||||
|
|
||||||
|
@Entity('personnes')
|
||||||
|
export class Person implements IPersonne {
|
||||||
|
@PrimaryGeneratedColumn('uuid')
|
||||||
|
id!: string;
|
||||||
|
|
||||||
|
@Column({ unique: true })
|
||||||
|
numeroLicence!: string;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
nom!: string;
|
||||||
|
|
||||||
|
@Column()
|
||||||
|
prenom!: string;
|
||||||
|
|
||||||
|
@Column({ type: 'date' })
|
||||||
|
dateNaissance!: string;
|
||||||
|
|
||||||
|
@Column({ default: false })
|
||||||
|
surclasse!: boolean;
|
||||||
|
|
||||||
|
@Column({ default: false })
|
||||||
|
coach!: boolean;
|
||||||
|
}
|
||||||
20
packages/backend/src/persons/persons.controller.spec.ts
Normal file
20
packages/backend/src/persons/persons.controller.spec.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { PersonsController } from './persons.controller';
|
||||||
|
import { PersonsService } from './persons.service';
|
||||||
|
|
||||||
|
describe('PersonsController', () => {
|
||||||
|
let controller: PersonsController;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
controllers: [PersonsController],
|
||||||
|
providers: [PersonsService],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
controller = module.get<PersonsController>(PersonsController);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(controller).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
34
packages/backend/src/persons/persons.controller.ts
Normal file
34
packages/backend/src/persons/persons.controller.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
|
||||||
|
import { PersonsService } from './persons.service';
|
||||||
|
import { CreatePersonDto } from './dto/create-person.dto';
|
||||||
|
import { UpdatePersonDto } from './dto/update-person.dto';
|
||||||
|
|
||||||
|
@Controller('persons')
|
||||||
|
export class PersonsController {
|
||||||
|
constructor(private readonly personsService: PersonsService) {}
|
||||||
|
|
||||||
|
@Post()
|
||||||
|
create(@Body() createPersonDto: CreatePersonDto) {
|
||||||
|
return this.personsService.create(createPersonDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get()
|
||||||
|
findAll() {
|
||||||
|
return this.personsService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get(':id')
|
||||||
|
findOne(@Param('id') id: string) {
|
||||||
|
return this.personsService.findOne(+id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Patch(':id')
|
||||||
|
update(@Param('id') id: string, @Body() updatePersonDto: UpdatePersonDto) {
|
||||||
|
return this.personsService.update(+id, updatePersonDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Delete(':id')
|
||||||
|
remove(@Param('id') id: string) {
|
||||||
|
return this.personsService.remove(+id);
|
||||||
|
}
|
||||||
|
}
|
||||||
12
packages/backend/src/persons/persons.module.ts
Normal file
12
packages/backend/src/persons/persons.module.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { Module } from '@nestjs/common';
|
||||||
|
import { PersonsService } from './persons.service';
|
||||||
|
import { PersonsController } from './persons.controller';
|
||||||
|
import { Person } from './entities/person.entity';
|
||||||
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [TypeOrmModule.forFeature([Person])],
|
||||||
|
controllers: [PersonsController],
|
||||||
|
providers: [PersonsService],
|
||||||
|
})
|
||||||
|
export class PersonsModule {}
|
||||||
18
packages/backend/src/persons/persons.service.spec.ts
Normal file
18
packages/backend/src/persons/persons.service.spec.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
|
import { PersonsService } from './persons.service';
|
||||||
|
|
||||||
|
describe('PersonsService', () => {
|
||||||
|
let service: PersonsService;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const module: TestingModule = await Test.createTestingModule({
|
||||||
|
providers: [PersonsService],
|
||||||
|
}).compile();
|
||||||
|
|
||||||
|
service = module.get<PersonsService>(PersonsService);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be defined', () => {
|
||||||
|
expect(service).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
26
packages/backend/src/persons/persons.service.ts
Normal file
26
packages/backend/src/persons/persons.service.ts
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { CreatePersonDto } from './dto/create-person.dto';
|
||||||
|
import { UpdatePersonDto } from './dto/update-person.dto';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class PersonsService {
|
||||||
|
create(createPersonDto: CreatePersonDto) {
|
||||||
|
return 'This action adds a new person';
|
||||||
|
}
|
||||||
|
|
||||||
|
findAll() {
|
||||||
|
return `This action returns all persons`;
|
||||||
|
}
|
||||||
|
|
||||||
|
findOne(id: number) {
|
||||||
|
return `This action returns a #${id} person`;
|
||||||
|
}
|
||||||
|
|
||||||
|
update(id: number, updatePersonDto: UpdatePersonDto) {
|
||||||
|
return `This action updates a #${id} person`;
|
||||||
|
}
|
||||||
|
|
||||||
|
remove(id: number) {
|
||||||
|
return `This action removes a #${id} person`;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import { IsEmail, IsNotEmpty, MinLength } from 'class-validator';
|
import { IsEmail, IsNotEmpty, MinLength } from 'class-validator';
|
||||||
|
import { ICreateUserDTO } from '@gim/shared';
|
||||||
|
|
||||||
export class CreateUserDto {
|
export class CreateUserDto implements ICreateUserDTO {
|
||||||
@IsEmail({}, { message: "L'email doit être valide" })
|
@IsEmail({}, { message: "L'email doit être valide" })
|
||||||
email!: string;
|
email!: string;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
|
import { IUser } from '@gim/shared';
|
||||||
import {
|
import {
|
||||||
Entity,
|
Entity,
|
||||||
PrimaryGeneratedColumn,
|
PrimaryGeneratedColumn,
|
||||||
Column,
|
Column,
|
||||||
CreateDateColumn,
|
CreateDateColumn,
|
||||||
|
ManyToMany,
|
||||||
|
JoinTable,
|
||||||
} from 'typeorm';
|
} from 'typeorm';
|
||||||
|
import { Person } from '../../persons/entities/person.entity';
|
||||||
|
|
||||||
@Entity('utilisateurs')
|
@Entity('utilisateurs')
|
||||||
export class User {
|
export class User implements IUser {
|
||||||
@PrimaryGeneratedColumn('uuid')
|
@PrimaryGeneratedColumn('uuid')
|
||||||
id!: string;
|
id!: string;
|
||||||
|
|
||||||
@@ -24,4 +28,8 @@ export class User {
|
|||||||
|
|
||||||
@CreateDateColumn()
|
@CreateDateColumn()
|
||||||
dateCreation!: Date;
|
dateCreation!: Date;
|
||||||
|
|
||||||
|
@ManyToMany(() => Person)
|
||||||
|
@JoinTable({ name: 'utilisateurs_personnes' })
|
||||||
|
personnesRattachees!: Person[];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@gim/shared",
|
"name": "@gim/shared",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"main": "index.js"
|
"private": true,
|
||||||
}
|
"main": "src/index.ts",
|
||||||
|
"types": "src/index.ts"
|
||||||
|
}
|
||||||
2
packages/shared/src/index.ts
Normal file
2
packages/shared/src/index.ts
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export * from './users/user.interface';
|
||||||
|
export * from './persons/person.interface';
|
||||||
19
packages/shared/src/persons/person.interface.ts
Normal file
19
packages/shared/src/persons/person.interface.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Contrat pour les données envoyées lors de la création d'une personne
|
||||||
|
*/
|
||||||
|
export interface ICreatePersonneDTO {
|
||||||
|
numeroLicence: string;
|
||||||
|
nom: string;
|
||||||
|
prenom: string;
|
||||||
|
dateNaissance: string; // Format ISO: "YYYY-MM-DD"
|
||||||
|
surclasse?: boolean;
|
||||||
|
coach?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contrat pour les données renvoyées par l'API (profil public)
|
||||||
|
*/
|
||||||
|
export interface IPersonne extends ICreatePersonneDTO {
|
||||||
|
id: string;
|
||||||
|
}
|
||||||
20
packages/shared/src/users/user.interface.ts
Normal file
20
packages/shared/src/users/user.interface.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* Contrat pour les données envoyées lors de l'inscription
|
||||||
|
*/
|
||||||
|
export interface ICreateUserDTO {
|
||||||
|
email: string;
|
||||||
|
motDePasse: string;
|
||||||
|
nom: string;
|
||||||
|
prenom: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contrat pour les données renvoyées par l'API (profil public)
|
||||||
|
*/
|
||||||
|
export interface IUser {
|
||||||
|
id: string;
|
||||||
|
email: string;
|
||||||
|
nom: string;
|
||||||
|
prenom: string;
|
||||||
|
dateCreation: Date;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user