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,26 @@
import { BaseEntity } from '@edr/api-common';
import { Passenger } from '@edr/types';
import { Column, Entity } from 'typeorm';
@Entity({ name: 'seats' })
export class Seat extends BaseEntity {
@Column({ name: 'schedule_id', type: 'uuid' })
scheduleId!: string;
@Column({ name: 'seat_number', type: 'varchar', length: 16 })
seatNumber!: string;
@Column({ name: 'seat_class', type: 'enum', enum: Passenger.SeatClass })
seatClass!: Passenger.SeatClass;
@Column({
name: 'status',
type: 'enum',
enum: Passenger.SeatStatus,
default: Passenger.SeatStatus.Available,
})
status!: Passenger.SeatStatus;
@Column({ name: 'price', type: 'numeric', precision: 10, scale: 2 })
price!: number;
}

View File

@@ -0,0 +1,17 @@
import { Controller, Get, Param, ParseUUIDPipe } from '@nestjs/common';
import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { SeatsService } from './seats.service';
@ApiTags('seats')
// @UseGuards(JwtAuthGuard) — TODO: integrate @edr/auth
@Controller('seats')
export class SeatsController {
constructor(private readonly seatsService: SeatsService) {}
@Get('schedule/:scheduleId')
@ApiOperation({ summary: 'List seats for a schedule' })
findBySchedule(@Param('scheduleId', ParseUUIDPipe) scheduleId: string) {
return this.seatsService.findBySchedule(scheduleId);
}
}

View File

@@ -0,0 +1,14 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Seat } from './entities/seat.entity';
import { SeatsController } from './seats.controller';
import { SeatsService } from './seats.service';
@Module({
imports: [TypeOrmModule.forFeature([Seat])],
controllers: [SeatsController],
providers: [SeatsService],
exports: [SeatsService],
})
export class SeatsModule {}

View File

@@ -0,0 +1,21 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Seat } from './entities/seat.entity';
@Injectable()
export class SeatsService {
constructor(
@InjectRepository(Seat)
private readonly seatsRepository: Repository<Seat>,
) {}
/** List every seat on a given schedule, ordered by seat number. */
findBySchedule(scheduleId: string): Promise<Seat[]> {
return this.seatsRepository.find({
where: { scheduleId },
order: { seatNumber: 'ASC' },
});
}
}