1 Commits

Author SHA1 Message Date
raveline
a3802454d5 Personne en cours 2026-04-16 20:51:25 +02:00
13 changed files with 208 additions and 5 deletions

View File

@@ -4,13 +4,13 @@
// List of extensions which should be recommended for users of this workspace. // List of extensions which should be recommended for users of this workspace.
"recommendations": [ "recommendations": [
],
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
"unwantedRecommendations": [
"dbaeumer.vscode-eslint", "dbaeumer.vscode-eslint",
"esbenp.prettier-vscode", "esbenp.prettier-vscode",
"Vue.volar", "Vue.volar",
"atommaterial.a-file-icon-vscode" "atommaterial.a-file-icon-vscode"
],
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
"unwantedRecommendations": [
] ]
} }

View File

@@ -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],

View 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;
}

View File

@@ -0,0 +1,4 @@
import { PartialType } from '@nestjs/mapped-types';
import { CreatePersonDto } from './create-person.dto';
export class UpdatePersonDto extends PartialType(CreatePersonDto) {}

View 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;
}

View 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();
});
});

View 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);
}
}

View 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 {}

View 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();
});
});

View 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`;
}
}

View File

@@ -4,7 +4,10 @@ import {
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 implements IUser { export class User implements IUser {
@@ -25,4 +28,8 @@ export class User implements IUser {
@CreateDateColumn() @CreateDateColumn()
dateCreation!: Date; dateCreation!: Date;
@ManyToMany(() => Person)
@JoinTable({ name: 'utilisateurs_personnes' })
personnesRattachees!: Person[];
} }

View File

@@ -1 +1,2 @@
export * from './users/user.interface'; export * from './users/user.interface';
export * from './persons/person.interface';

View 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;
}