Project Initialization

This commit is contained in:
Muluhabt
2026-05-12 15:17:16 +03:00
parent 33fa742e8a
commit 3b8b6979db
259 changed files with 15962 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
import { IsDateString, IsEmail, IsOptional, IsString } from 'class-validator';
export class CreatePassengerDto {
@IsString()
fullName!: string;
@IsEmail()
email!: string;
@IsString()
phone!: string;
@IsOptional()
@IsString()
nationalId?: string;
@IsOptional()
@IsDateString()
dateOfBirth?: string;
}

View File

@@ -0,0 +1,20 @@
import { BaseEntity } from '@edr/api-common';
import { Column, Entity } from 'typeorm';
@Entity({ name: 'passengers' })
export class Passenger extends BaseEntity {
@Column({ name: 'full_name', type: 'varchar', length: 256 })
fullName!: string;
@Column({ name: 'email', type: 'varchar', length: 256, unique: true })
email!: string;
@Column({ name: 'phone', type: 'varchar', length: 32 })
phone!: string;
@Column({ name: 'national_id', type: 'varchar', length: 64, nullable: true })
nationalId?: string | null;
@Column({ name: 'date_of_birth', type: 'date', nullable: true })
dateOfBirth?: string | null;
}

View File

@@ -0,0 +1,30 @@
import { Body, Controller, Get, Param, ParseUUIDPipe, Post } from '@nestjs/common';
import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { CreatePassengerDto } from './dto/create-passenger.dto';
import { PassengersService } from './passengers.service';
@ApiTags('passengers')
// @UseGuards(JwtAuthGuard) — TODO: integrate @edr/auth
@Controller('passengers')
export class PassengersController {
constructor(private readonly passengersService: PassengersService) {}
@Post()
@ApiOperation({ summary: 'Register a new passenger' })
create(@Body() dto: CreatePassengerDto) {
return this.passengersService.create(dto);
}
@Get()
@ApiOperation({ summary: 'List all passengers' })
findAll() {
return this.passengersService.findAll();
}
@Get(':id')
@ApiOperation({ summary: 'Get a passenger by ID' })
findOne(@Param('id', ParseUUIDPipe) id: string) {
return this.passengersService.findById(id);
}
}

View File

@@ -0,0 +1,15 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Passenger } from './entities/passenger.entity';
import { PassengersController } from './passengers.controller';
import { PassengersRepository } from './passengers.repository';
import { PassengersService } from './passengers.service';
@Module({
imports: [TypeOrmModule.forFeature([Passenger])],
controllers: [PassengersController],
providers: [PassengersService, PassengersRepository],
exports: [PassengersService],
})
export class PassengersModule {}

View File

@@ -0,0 +1,21 @@
import { BaseRepository } from '@edr/api-common';
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Passenger } from './entities/passenger.entity';
@Injectable()
export class PassengersRepository extends BaseRepository<Passenger> {
constructor(
@InjectRepository(Passenger)
repository: Repository<Passenger>,
) {
super(repository);
}
/** Find a passenger by their unique email. */
findByEmail(email: string): Promise<Passenger | null> {
return this.repository.findOne({ where: { email } });
}
}

View File

@@ -0,0 +1,29 @@
import { Injectable, NotFoundException } from '@nestjs/common';
import { CreatePassengerDto } from './dto/create-passenger.dto';
import { Passenger } from './entities/passenger.entity';
import { PassengersRepository } from './passengers.repository';
@Injectable()
export class PassengersService {
constructor(private readonly passengersRepository: PassengersRepository) {}
/** Register a new passenger. */
create(dto: CreatePassengerDto): Promise<Passenger> {
return this.passengersRepository.create(dto);
}
/** List every passenger (alphabetical). */
findAll(): Promise<Passenger[]> {
return this.passengersRepository.findAll({ order: { fullName: 'ASC' } });
}
/** Get a single passenger by ID. */
async findById(id: string): Promise<Passenger> {
const passenger = await this.passengersRepository.findById(id);
if (!passenger) {
throw new NotFoundException(`Passenger ${id} not found`);
}
return passenger;
}
}