From 2931be07bb6c5c6ba6cf4da9eead8d305a1ee90f Mon Sep 17 00:00:00 2001 From: Arthur DANJOU Date: Mon, 16 Aug 2021 23:30:32 +0200 Subject: [PATCH] Add tags pivot in projects --- app/Controllers/Http/ProjectsController.ts | 12 ++++++++---- app/Models/Project.ts | 8 +++++--- app/Validators/project/ProjectStoreValidator.ts | 3 ++- app/Validators/project/ProjectUpdateValidator.ts | 3 ++- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/Controllers/Http/ProjectsController.ts b/app/Controllers/Http/ProjectsController.ts index 7d59a83..6a03320 100755 --- a/app/Controllers/Http/ProjectsController.ts +++ b/app/Controllers/Http/ProjectsController.ts @@ -10,7 +10,8 @@ export default class ProjectsController { return response.status(200).send({ projects: await Project.query() .orderBy('id', 'asc') - .preload('file') + .preload('cover') + .preload('tags') }) } @@ -19,7 +20,8 @@ export default class ProjectsController { const project = await Project.create(data) const cover = await File.findByOrFail('label', data.cover) - await project.related('file').associate(cover) + await project.related('cover').associate(cover) + await project.related('tags').sync(data.tags!) return response.status(200).send({ project }) @@ -27,7 +29,8 @@ export default class ProjectsController { public async show ({ params, response }: HttpContextContract) { const project = await Project.findOrFail(params.id) - await project.load('file') + await project.load('cover') + await project.load('tags') return response.status(200).send({ project }) @@ -39,7 +42,8 @@ export default class ProjectsController { const cover = await File.findBy('label', data.cover) await project.merge(data).save() - if (cover) await project.related('file').associate(cover) + if (cover) await project.related('cover').associate(cover) + await project.related('tags').sync(data.tags!) return response.status(200).send({ project }) diff --git a/app/Models/Project.ts b/app/Models/Project.ts index 128dd21..cc0fc47 100755 --- a/app/Models/Project.ts +++ b/app/Models/Project.ts @@ -19,11 +19,13 @@ export default class Project extends BaseModel { @column() public url: string - @belongsTo(() => File) - public file: BelongsTo + @belongsTo(() => File, { + foreignKey: 'coverId' + }) + public cover: BelongsTo @column() - public fileId: number + public coverId: number @manyToMany(() => Tag) public tags: ManyToMany diff --git a/app/Validators/project/ProjectStoreValidator.ts b/app/Validators/project/ProjectStoreValidator.ts index 638fba4..5234f85 100755 --- a/app/Validators/project/ProjectStoreValidator.ts +++ b/app/Validators/project/ProjectStoreValidator.ts @@ -10,7 +10,8 @@ export default class ProjectStoreValidator { description: schema.string(), progress: schema.number(), url: schema.string(), - cover: schema.string() + cover: schema.string(), + tags: schema.array.optional().members(schema.string()) }) public messages = { diff --git a/app/Validators/project/ProjectUpdateValidator.ts b/app/Validators/project/ProjectUpdateValidator.ts index 1256a46..b81e219 100644 --- a/app/Validators/project/ProjectUpdateValidator.ts +++ b/app/Validators/project/ProjectUpdateValidator.ts @@ -7,7 +7,8 @@ export default class ProjectUpdateValidator { description: schema.string.optional(), progress: schema.number.optional(), url: schema.string.optional(), - cover: schema.string.optional() + cover: schema.string.optional(), + tags: schema.array.optional().members(schema.string()) }) public messages = { required: 'The field {{field}} is required'