Initial commit: PC Builder AdonisJS project
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
import type { HttpContext } from '@adonisjs/core/http'
|
||||
import Computer from '#models/computer'
|
||||
import ComputerState from '#models/computer_state'
|
||||
import Component from '#models/component'
|
||||
import { storeComputerValidator } from '#validators/Computers/store'
|
||||
import { handleComponents } from '#services/component_service'
|
||||
import { handlePictures } from '#services/picture_service'
|
||||
import type { Image } from '#types/UItypes'
|
||||
import { updateComputerValidator } from '#validators/Computers/update'
|
||||
|
||||
export default class ComputersController {
|
||||
async index({ auth, inertia }: HttpContext) {
|
||||
const user = await auth.authenticate()
|
||||
const computers = await Computer.query()
|
||||
.where('user_id', user.id)
|
||||
.preload('state')
|
||||
.preload('components')
|
||||
.preload('pictures', (picturesQuery) => {
|
||||
picturesQuery.where('order', 1)
|
||||
})
|
||||
|
||||
return inertia.render('computers/index', { computers })
|
||||
}
|
||||
|
||||
async create({ auth, inertia }: HttpContext) {
|
||||
const user = await auth.authenticate()
|
||||
const states = await ComputerState.all()
|
||||
const components = await Component.query()
|
||||
.where('userId', user.id)
|
||||
.whereNull('computerId')
|
||||
.preload('type')
|
||||
return inertia.render('computers/create', { components, states })
|
||||
}
|
||||
|
||||
async store({ auth, request, response }: HttpContext) {
|
||||
const data = request.all()
|
||||
const user = await auth.authenticate()
|
||||
const { pictures, componentsId, ...computerData } = await storeComputerValidator.validate(data)
|
||||
await ComputerState.findOrFail(computerData.stateId)
|
||||
const computer = await Computer.create({
|
||||
...computerData,
|
||||
userId: user.id,
|
||||
})
|
||||
await handleComponents(componentsId as number[], computer)
|
||||
await handlePictures(pictures as Image[], request, computer)
|
||||
return response.redirect('computers/')
|
||||
}
|
||||
|
||||
async show({ auth, inertia, params }: HttpContext) {
|
||||
const user = await auth.authenticate()
|
||||
const computerId = params.id
|
||||
const computer = await Computer.query()
|
||||
.preload('state')
|
||||
.preload('components', (componentsQuery) => {
|
||||
componentsQuery.preload('type')
|
||||
})
|
||||
.preload('pictures', (picturesQuery) => {
|
||||
picturesQuery.orderBy('order')
|
||||
})
|
||||
.where('user_id', user.id)
|
||||
.andWhere('id', computerId)
|
||||
.firstOrFail()
|
||||
return inertia.render('computers/show', { computer })
|
||||
}
|
||||
|
||||
async edit({ params, inertia, auth }: HttpContext) {
|
||||
const user = await auth.authenticate()
|
||||
const states = await ComputerState.all()
|
||||
const computerId = params.id
|
||||
|
||||
const computer = await Computer.query()
|
||||
.preload('state')
|
||||
.preload('components', (componentsQuery) => {
|
||||
componentsQuery.preload('type')
|
||||
})
|
||||
.preload('pictures')
|
||||
.where('user_id', user.id)
|
||||
.andWhere('id', computerId)
|
||||
.firstOrFail()
|
||||
|
||||
const availableComponents = await Component.query()
|
||||
.preload('type')
|
||||
.where('user_id', user.id)
|
||||
.whereNull('computer_id')
|
||||
.whereNotIn(
|
||||
'id',
|
||||
computer.components.map((c) => c.id)
|
||||
)
|
||||
return inertia.render('computers/edit', { computer, availableComponents, states })
|
||||
}
|
||||
|
||||
async update({ params, request, response }: HttpContext) {
|
||||
const computerId = params.id
|
||||
const { pictures, componentsId, ...computerData } = await updateComputerValidator.validate(
|
||||
request.all()
|
||||
)
|
||||
const computer = await Computer.findOrFail(computerId)
|
||||
computer.merge(computerData)
|
||||
await computer.save()
|
||||
await handleComponents(componentsId as number[], computer)
|
||||
await handlePictures(pictures as Image[], request, computer)
|
||||
return response.redirect(`${computer.id}`)
|
||||
}
|
||||
|
||||
async destroy({ params, response }: HttpContext) {
|
||||
const computerId = params.id
|
||||
const computer = await Computer.findOrFail(computerId)
|
||||
await computer.delete()
|
||||
return response.redirect('/computers')
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user