chore: upload multi files
This commit is contained in:
@@ -4,10 +4,11 @@ import { TypeOrmModule } from "@nestjs/typeorm";
|
|||||||
import { AnnouncementController } from "./announcement.controller";
|
import { AnnouncementController } from "./announcement.controller";
|
||||||
import { AnnouncementService } from "./announcement.service";
|
import { AnnouncementService } from "./announcement.service";
|
||||||
import { Announcement } from "./entities/announcement.entity";
|
import { Announcement } from "./entities/announcement.entity";
|
||||||
|
import { AnnouncementRepository } from "./repositories/announcement.repository";
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [TypeOrmModule.forFeature([Announcement])],
|
imports: [TypeOrmModule.forFeature([Announcement])],
|
||||||
providers: [AnnouncementService],
|
providers: [AnnouncementService, AnnouncementRepository],
|
||||||
controllers: [AnnouncementController],
|
controllers: [AnnouncementController],
|
||||||
exports: [TypeOrmModule],
|
exports: [TypeOrmModule],
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
import { Injectable } from "@nestjs/common";
|
import { Injectable } from "@nestjs/common";
|
||||||
|
|
||||||
|
// import { AnnouncementRepository } from "./repositories/announcement.repository";
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AnnouncementService {
|
export class AnnouncementService {
|
||||||
constructor() {}
|
// constructor(private readonly announcementRepository: AnnouncementRepository) {}
|
||||||
|
|
||||||
|
async createAnnouncement() {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Column, Entity, Index, ManyToMany } from "typeorm";
|
import { Column, Entity, Index, ManyToMany, ManyToOne } from "typeorm";
|
||||||
|
|
||||||
import { BaseEntity } from "../../../common/entities/base.entity";
|
import { BaseEntity } from "../../../common/entities/base.entity";
|
||||||
|
import { DanakService } from "../../danak-services/entities/danak-service.entity";
|
||||||
import { UserGroup } from "../../users/entities/user-group.entity";
|
import { UserGroup } from "../../users/entities/user-group.entity";
|
||||||
|
|
||||||
@Entity()
|
@Entity()
|
||||||
@@ -17,6 +18,8 @@ export class Announcement extends BaseEntity {
|
|||||||
|
|
||||||
//TODO: Add service here
|
//TODO: Add service here
|
||||||
//TODO: Add customer here
|
//TODO: Add customer here
|
||||||
|
@ManyToOne(() => DanakService, (service) => service.announcements, { eager: true, onDelete: "CASCADE" })
|
||||||
|
service: DanakService;
|
||||||
|
|
||||||
@Column({ type: "boolean", default: false })
|
@Column({ type: "boolean", default: false })
|
||||||
isImportant: boolean;
|
isImportant: boolean;
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import { Injectable } from "@nestjs/common";
|
||||||
|
import { InjectRepository } from "@nestjs/typeorm";
|
||||||
|
import { Repository } from "typeorm";
|
||||||
|
|
||||||
|
import { Announcement } from "../entities/announcement.entity";
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class AnnouncementRepository extends Repository<Announcement> {
|
||||||
|
constructor(@InjectRepository(Announcement) announcementRepository: Repository<Announcement>) {
|
||||||
|
super(announcementRepository.target, announcementRepository.manager, announcementRepository.queryRunner);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ import { Column, Entity, ManyToMany, ManyToOne, OneToMany } from "typeorm";
|
|||||||
import { DanakServiceCategory } from "./danak-service-category.entity";
|
import { DanakServiceCategory } from "./danak-service-category.entity";
|
||||||
import { DanakServiceImage } from "./danak-service-image.entity";
|
import { DanakServiceImage } from "./danak-service-image.entity";
|
||||||
import { BaseEntity } from "../../../common/entities/base.entity";
|
import { BaseEntity } from "../../../common/entities/base.entity";
|
||||||
|
import { Announcement } from "../../announcements/entities/announcement.entity";
|
||||||
import { Ticket } from "../../tickets/entities/ticket.entity";
|
import { Ticket } from "../../tickets/entities/ticket.entity";
|
||||||
import { User } from "../../users/entities/user.entity";
|
import { User } from "../../users/entities/user.entity";
|
||||||
import { ServiceStatus } from "../enums/service-status.enum";
|
import { ServiceStatus } from "../enums/service-status.enum";
|
||||||
@@ -55,6 +56,9 @@ export class DanakService extends BaseEntity {
|
|||||||
@OneToMany(() => DanakServiceImage, (danakServiceImage) => danakServiceImage.danakService, { eager: true, cascade: true })
|
@OneToMany(() => DanakServiceImage, (danakServiceImage) => danakServiceImage.danakService, { eager: true, cascade: true })
|
||||||
images: DanakServiceImage[];
|
images: DanakServiceImage[];
|
||||||
|
|
||||||
|
@OneToMany(() => Announcement, (announcement) => announcement.service)
|
||||||
|
announcements: Announcement[];
|
||||||
|
|
||||||
@OneToMany(() => Ticket, (ticket) => ticket.danakService)
|
@OneToMany(() => Ticket, (ticket) => ticket.danakService)
|
||||||
tickets: Ticket[];
|
tickets: Ticket[];
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { FileInterceptor } from "@nest-lab/fastify-multer";
|
import { FileInterceptor, FilesInterceptor } from "@nest-lab/fastify-multer";
|
||||||
import { Controller, Post, UploadedFile, UseInterceptors } from "@nestjs/common";
|
import { Controller, Post, UploadedFile, UploadedFiles, UseInterceptors } from "@nestjs/common";
|
||||||
import { ApiBody, ApiConsumes, ApiOperation, ApiTags } from "@nestjs/swagger";
|
import { ApiBody, ApiConsumes, ApiOperation, ApiTags } from "@nestjs/swagger";
|
||||||
|
|
||||||
import { UploaderService } from "./uploader.service";
|
import { UploaderService } from "./uploader.service";
|
||||||
@@ -30,4 +30,28 @@ export class UploaderController {
|
|||||||
console.log(file);
|
console.log(file);
|
||||||
return await this.uploaderService.upload(file);
|
return await this.uploaderService.upload(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation({ summary: "Uploads multiple files" })
|
||||||
|
@ApiConsumes("multipart/form-data")
|
||||||
|
@UseInterceptors(FilesInterceptor("files"))
|
||||||
|
@ApiBody({
|
||||||
|
required: true,
|
||||||
|
schema: {
|
||||||
|
type: "object",
|
||||||
|
properties: {
|
||||||
|
files: {
|
||||||
|
type: "array",
|
||||||
|
items: {
|
||||||
|
type: "string",
|
||||||
|
format: "binary",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
@Post("multi-file")
|
||||||
|
async uploadFiles(@UploadedFiles() files: IFile[]) {
|
||||||
|
console.log({ files });
|
||||||
|
return await this.uploaderService.uploadMultiple(files);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,4 +10,9 @@ export class UploaderService {
|
|||||||
async upload(file: IFile) {
|
async upload(file: IFile) {
|
||||||
return await this.s3Service.upload(file);
|
return await this.s3Service.upload(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async uploadMultiple(files: IFile[]) {
|
||||||
|
const uploadPromises = files.map((file) => this.s3Service.upload(file));
|
||||||
|
return await Promise.all(uploadPromises);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user