Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Nekitech committed May 2, 2024
1 parent d28cdd6 commit 737fedc
Show file tree
Hide file tree
Showing 16 changed files with 155 additions and 84 deletions.
9 changes: 9 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,18 @@ docker_create_volume:

build: docker_create_volume docker_build run_db_push

backup_db:
docker exec db sh -c "pg_dumpall -c -U postgres > dump.sql"

restore_db:
cat dump_.sql | docker exec -i db psql -U postgres -d reeq-db

run_db_push:
npx prisma db push

cp_dump_file:
docker cp 77725cc46d2b:/dump.sql ./prisma/dumps

run_migrations:
npx prisma migrate deploy
## Для загрузки дампа
Expand Down
12 changes: 12 additions & 0 deletions package-lock.json

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

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"build": "rimraf build && tsc",
"start": "npm run build && node --es-module-specifier-resolution=node build/src/app.js",
"docker_build": "docker-compose up -d --build",
"migrate": "npx prisma migrate dev --name",
"migrate:dev": "npx dotenv-cli -e .env.development -- npx prisma migrate dev --name",
"seed": "node --loader ts-node/esm prisma/seeds/seeds.ts"
},
"type": "module",
Expand Down Expand Up @@ -48,6 +48,7 @@
"jsonwebtoken": "^9.0.2",
"module-alias": "^2.2.3",
"moment": "^2.30.1",
"moment-timezone": "^0.5.45",
"multer": "^1.4.5-lts.1",
"pg": "^8.11.3",
"socket.io": "^4.7.5"
Expand Down
8 changes: 1 addition & 7 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ model equipments {
name String @db.VarChar(255)
description String?
count Int
status StatusEquipment @default(FREE)
img_hrefs String[]
created_at DateTime @default(now()) @db.Timestamptz(6)
updated_at DateTime @default(now()) @db.Timestamptz(6)
Expand Down Expand Up @@ -94,9 +93,4 @@ enum StatusBooking {
CREATED
COMPLETE
EXPIRED
}

enum StatusEquipment {
FREE
BOOKED
}
}
19 changes: 7 additions & 12 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,12 @@ import {bookingRoutes} from "./infrastructure/routes/rest/BookingRoutes";
import {uploadRoutes} from "./infrastructure/routes/rest/UploadRoutes";
import bodyParser from "body-parser";
import multer from "multer";
import {Server} from "socket.io";
import * as http from "node:http";

dotenv.config();
const app = express();
const router = express.Router();
const server = new http.Server(app)
const server = http.createServer(app)

app.use(express.json())
app.use(cookieParser())
Expand Down Expand Up @@ -47,19 +46,15 @@ app.use(ErrorMiddleware)

const port = process.env.PORT;

// Websocket init

const io = new Server(server)
io.on('connection', (socket) => {
console.log('a user connected');
});


app.get('/api', (req, res) => {
res.send('Express + TypeScript Server');
});


app.listen(port, () => {

server.listen(port, () => {
console.log(`⚡️[server]: Server is running at http://localhost:${port}/api`);
});
});



1 change: 0 additions & 1 deletion src/app/models/Equipment/Equipment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ export class Equipment {
public name: string,
public description: string | null,
public count: number,
public status: keyof typeof EquipmentStatus,
public img_hrefs: string[],
public created_at?: Date,
public updated_at?: Date,
Expand Down
2 changes: 2 additions & 0 deletions src/app/repositories/BookingRepo.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {Booking} from "../models/Booking/Booking";
import {addBookingDto, getBookingByParamsDtoType} from "./dto/addBookingDto";
import {updateBookingDto} from "./dto/updateBookingDto";
import {BookingValidations} from "../../infrastructure/validations/Booking/BookingValidations";

export interface BookingRepo {
getByFilter(date: string, skip: number| undefined, take: number| undefined): Promise<Booking[] | null>
Expand All @@ -9,4 +10,5 @@ export interface BookingRepo {
getByField(fields: object): Promise<{}[]>
getByParams(params: getBookingByParamsDtoType, include: object): any
getListsTimeReservation(equipment_id: number): any
getBySelect(where: object, select: object): Promise<Booking[] | null>
}
1 change: 1 addition & 0 deletions src/app/repositories/UserRepo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export interface UserRepo {
getById(id: number): Promise<User | null>
getByFieldName(fieldName: string, typeField: string): Promise<User | null>
add(user: addUserDto): Promise<User>
getBySelect(where: object, select: object): any
// delete(id: number): string
// update(user: updateUserDto): User
}
24 changes: 8 additions & 16 deletions src/app/services/BookingService/BookingService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ export class BookingService {
constructor(private bookingRepo: BookingRepo, private equipmentRepo: EquipmentRepo) {
}

async isBooking(id: number) {
const booking = await this.equipmentRepo.getById(id)
return booking?.status === EquipmentStatus.BOOKED
}
// async isBooking(id: number) {
// const booking = await this.equipmentRepo.getById(id)
// return booking?.status === EquipmentStatus.BOOKED
// }

/**
* Создание брони конкретного оборудования в БД
Expand All @@ -25,17 +25,12 @@ export class BookingService {
async CreateBooking(bookingData: addBookingDto) {
const {equipment_id} = bookingData

if(await this.isBooking(equipment_id)) {
throw ErrorsHandler.BadRequest("Оборудование уже забронировано!" )
}
// if(await this.isBooking(equipment_id)) {
// throw ErrorsHandler.BadRequest("Оборудование уже забронировано!" )
// }

const addedBooking = this.bookingRepo.add(bookingData)

// await this.equipmentRepo.update({
// id: equipment_id,
// status: EquipmentStatus.BOOKED
// })

return addedBooking
}

Expand All @@ -62,10 +57,7 @@ export class BookingService {
}

async closeBooking(bookingId: number, equipmentId: number) {
await this.equipmentRepo.update({
id: equipmentId,
status: EquipmentStatus.FREE
})

return this.bookingRepo.update({
id: bookingId,
status: BookingStatus.COMPLETE,
Expand Down
40 changes: 40 additions & 0 deletions src/app/services/Notifications/NotificationsService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import {BookingStatus} from "../../../infrastructure/shared/types/Booking";
import {equalDateTimeBookingExpired} from "../../../infrastructure/helpers/Date";
import {BookingRepo} from "../../repositories/BookingRepo";
import {UserRepo} from "../../repositories/UserRepo";

export class NotificationsService {

constructor(
private BookingRepo: BookingRepo,
private UserRepo: UserRepo,
) {
}


async sendAlertReservationNotification() {
const listUsers = await this.UserRepo.getBySelect({}, {
id: true
})
listUsers.forEach(async ({id: user_id}: {id: number}) => {

const listBookings = await this.BookingRepo.getBySelect({
status: BookingStatus.CREATED,
user_id
}, {
time_from: true,
time_to: true,
date: true
})

listBookings?.forEach((booking: any) => {
const {date, time_to} = booking
if(equalDateTimeBookingExpired(date, time_to)) {
console.log("check")
}
})

})
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ export class EquipmentController {
const {name, status, skip, take} = req.query;
const {data, count} = await this.equipmentService.getAllEquipments({
name: name as string,
status: status as EquipmentStatus,
}, Number(skip), Number(take))

res.send({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {Booking} from "../../../../app/models/Booking/Booking";
import {addBookingDto, getBookingByParamsDtoType} from "../../../../app/repositories/dto/addBookingDto";
import {prisma} from "../../orm/prisma/PrismaClient";
import {updateBookingDto} from "../../../../app/repositories/dto/updateBookingDto";
import {BookingValidations} from "../../../validations/Booking/BookingValidations";


class BookingRepoImplement implements BookingRepo {
Expand All @@ -20,6 +21,13 @@ class BookingRepoImplement implements BookingRepo {
})
}

async getBySelect(where: object, select: object): Promise<Booking[] | null> {
return prisma.booking.findMany({
where,
select
}) as Promise<Booking[] | null>
}

async getByParams(params: getBookingByParamsDtoType, include: object) {
return prisma.booking.findMany({
where: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ const defaultReturnObj: Equipment = {
id: 0,
description: "",
area_id: 0,
status: EquipmentStatus.FREE,
img_hrefs: []
}

Expand Down Expand Up @@ -51,7 +50,6 @@ export class EquipmentRepoImplement implements EquipmentRepo {
name: {
contains: filter?.name
},
status: filter?.status
},
skip,
take,
Expand Down
93 changes: 50 additions & 43 deletions src/infrastructure/db/repository/PostgresQL/UserRepoImplement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,49 +5,56 @@ import {addUserDto} from "../../../../app/repositories/dto/addUserDto";


export class UserRepoImplement implements UserRepo {
async getByFieldName(fieldName: string, typeField: string): Promise<User | null> {
return prisma.users.findFirst({
where: {
[typeField]: fieldName,
},
include: {
roles: {
select: {
role: true
}
}
}
})
}

async getById(id: number) {
return prisma.users.findUnique({
where: {
id
},
include: {
roles: {
select: {
role: true
}
}
}
})
}

async add(user: addUserDto) {
return prisma.users.create({
data: user,
include: {
roles: {
select: {
role: true
}
}
}
})
}

async getByFieldName(fieldName: string, typeField: string): Promise<User | null> {
return prisma.users.findFirst({
where: {
[typeField]: fieldName,
},
include: {
roles: {
select: {
role: true
}
}
},
})
}

async getBySelect(where: object, select: object) {
return prisma.users.findMany({
select,
where
})
}

async getById(id: number) {
return prisma.users.findUnique({
where: {
id
},
include: {
roles: {
select: {
role: true
}
}
}
})
}

async add(user: addUserDto) {
return prisma.users.create({
data: user,
include: {
roles: {
select: {
role: true
}
}
}
})
}

}

export const postgresUserRepository = new UserRepoImplement()
Loading

0 comments on commit 737fedc

Please sign in to comment.