From 0c70b340a999d2ef06177e993686721413da8911 Mon Sep 17 00:00:00 2001 From: Arthur DANJOU Date: Mon, 23 Aug 2021 14:38:14 +0200 Subject: [PATCH] Add maintenance mode and update announce --- app/Controllers/Http/AnnouncesController.ts | 22 ---------- .../Http/MaintenancesController.ts | 42 +++++++++++++++++++ app/Models/Maintenance.ts | 25 +++++++++++ .../announce/AnnounceUpdateValidator.ts | 2 +- .../MaintenanceUpdateValidator.ts} | 9 ++-- .../migrations/1629722224211_maintenances.ts | 22 ++++++++++ start/routes/artsite.ts | 4 +- 7 files changed, 97 insertions(+), 29 deletions(-) create mode 100644 app/Controllers/Http/MaintenancesController.ts create mode 100644 app/Models/Maintenance.ts rename app/Validators/{announce/AnnounceStoreValidator.ts => maintenance/MaintenanceUpdateValidator.ts} (63%) create mode 100644 database/migrations/1629722224211_maintenances.ts diff --git a/app/Controllers/Http/AnnouncesController.ts b/app/Controllers/Http/AnnouncesController.ts index 8be227b..5c656f6 100644 --- a/app/Controllers/Http/AnnouncesController.ts +++ b/app/Controllers/Http/AnnouncesController.ts @@ -1,6 +1,5 @@ import {HttpContextContract} from "@ioc:Adonis/Core/HttpContext"; import Announce from "App/Models/Announce"; -import AnnounceStoreValidator from "App/Validators/announce/AnnounceStoreValidator"; import AnnounceUpdateValidator from "App/Validators/announce/AnnounceUpdateValidator"; import getTranslation from "App/Tasks/getTranslation"; import File from "App/Models/File"; @@ -19,19 +18,6 @@ export default class AnnouncesController { }) } - public async store ({ request, response }: HttpContextContract) { - const data = await request.validate(AnnounceStoreValidator) - const announce = await Announce.create(data) - await announce.related('message').associate(await getTranslation(data.code)) - - const cover = await File.findBy('label', data.cover) - if (cover) await announce.related('cover').associate(cover) - - return response.status(200).send({ - announce: announce - }) - } - public async show ({ params, response }: HttpContextContract) { const announce = await Announce.findOrFail(params.id) announce.load('message') @@ -59,12 +45,4 @@ export default class AnnouncesController { }) } - public async destroy ({ response, params }: HttpContextContract) { - const announce = await Announce.findOrFail(params.id) - await announce.delete() - return response.status(200).send({ - message: 'Announce successfully deleted!' - }) - } - } diff --git a/app/Controllers/Http/MaintenancesController.ts b/app/Controllers/Http/MaintenancesController.ts new file mode 100644 index 0000000..558c1ee --- /dev/null +++ b/app/Controllers/Http/MaintenancesController.ts @@ -0,0 +1,42 @@ +import {HttpContextContract} from "@ioc:Adonis/Core/HttpContext"; +import getTranslation from "App/Tasks/getTranslation"; +import Maintenance from "App/Models/Maintenance"; +import MaintenanceUpdateValidator from "App/Validators/maintenance/MaintenanceUpdateValidator"; + +export default class MaintenancesController { + + public async index ({ response }: HttpContextContract) { + const maintenance = await Maintenance + .query() + .orderBy('created_at', 'desc') + .preload('reason') + .first() + return response.status(200).send({ + maintenance: maintenance + }) + } + + public async show ({ params, response }: HttpContextContract) { + const maintenance = await Maintenance.findOrFail(params.id) + maintenance.load('reason') + return response.status(200).send({ + maintenance + }) + } + + public async update ({ request, params, response }: HttpContextContract) { + const data = await request.validate(MaintenanceUpdateValidator) + const maintenance = await Maintenance.findOrFail(params.id) + + if (data.reason) { + await maintenance.related('reason').associate(await getTranslation(data.reason)) + } + + await maintenance.merge(data).save() + + return response.status(200).send({ + maintenance + }) + } + +} diff --git a/app/Models/Maintenance.ts b/app/Models/Maintenance.ts new file mode 100644 index 0000000..967681b --- /dev/null +++ b/app/Models/Maintenance.ts @@ -0,0 +1,25 @@ +import { DateTime } from 'luxon' +import {BaseModel, BelongsTo, belongsTo, column} from '@ioc:Adonis/Lucid/Orm' +import Translation from "App/Models/Translation"; + +export default class Maintenance extends BaseModel { + @column({ isPrimary: true }) + public id: number + + @column() + public active: boolean + + @belongsTo(() => Translation, { + foreignKey: 'reasonId' + }) + public reason: BelongsTo + + @column() + public reasonId: number + + @column.dateTime({ autoCreate: true }) + public createdAt: DateTime + + @column.dateTime({ autoCreate: true, autoUpdate: true }) + public updatedAt: DateTime +} diff --git a/app/Validators/announce/AnnounceUpdateValidator.ts b/app/Validators/announce/AnnounceUpdateValidator.ts index 3b5c9b9..144033b 100644 --- a/app/Validators/announce/AnnounceUpdateValidator.ts +++ b/app/Validators/announce/AnnounceUpdateValidator.ts @@ -6,7 +6,7 @@ export default class AnnounceUpdateValidator { } public schema = schema.create({ - code: schema.string(), + code: schema.string.optional(), cover: schema.string.optional(), color: schema.string.optional(), hoverColor: schema.string.optional() diff --git a/app/Validators/announce/AnnounceStoreValidator.ts b/app/Validators/maintenance/MaintenanceUpdateValidator.ts similarity index 63% rename from app/Validators/announce/AnnounceStoreValidator.ts rename to app/Validators/maintenance/MaintenanceUpdateValidator.ts index 3a70835..f40af69 100644 --- a/app/Validators/announce/AnnounceStoreValidator.ts +++ b/app/Validators/maintenance/MaintenanceUpdateValidator.ts @@ -1,16 +1,15 @@ import { schema } from '@ioc:Adonis/Core/Validator' import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' -export default class AnnounceStoreValidator { +export default class MaintenanceUpdateValidator { constructor (protected ctx: HttpContextContract) { } public schema = schema.create({ - code: schema.string(), - cover: schema.string.optional(), - color: schema.string(), - hoverColor: schema.string() + reason: schema.string.optional(), + active: schema.boolean.optional() }) + public messages = { required: 'The field {{field}} is required' } diff --git a/database/migrations/1629722224211_maintenances.ts b/database/migrations/1629722224211_maintenances.ts new file mode 100644 index 0000000..65312e6 --- /dev/null +++ b/database/migrations/1629722224211_maintenances.ts @@ -0,0 +1,22 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema' + +export default class Maintenances extends BaseSchema { + protected tableName = 'maintenances' + + public async up () { + this.schema.createTable(this.tableName, (table) => { + table.increments('id') + table.boolean('active').defaultTo(false).notNullable() + table + .integer('reason_id') + .unsigned() + .references('translations.id') + .onDelete('CASCADE') + table.timestamps(true, true) + }) + } + + public async down () { + this.schema.dropTable(this.tableName) + } +} diff --git a/start/routes/artsite.ts b/start/routes/artsite.ts index 9e67254..5b602ba 100644 --- a/start/routes/artsite.ts +++ b/start/routes/artsite.ts @@ -3,7 +3,9 @@ import Route from "@ioc:Adonis/Core/Route"; Route.group(() => { Route.resource('/form', 'FormsController').except(['edit', 'create', 'update']) - Route.resource('/announces', 'AnnouncesController').except(['edit', 'create']) + Route.resource('/announces', 'AnnouncesController').only(['index', 'show', 'update']) + + Route.resource('/maintenance', 'MaintenanceController').only(['index', 'show', 'update']) Route.resource('/experiences', 'ExperiencesController').except(['edit', 'create'])