Initial commit: PC Builder AdonisJS project
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import type { HttpContext } from '@adonisjs/core/http'
|
||||
import { storeComponentValidator } from '#validators/Components/store'
|
||||
import { updateComponentValidator } from '#validators/Components/update'
|
||||
import Component from '#models/component'
|
||||
import ComponentType from '#models/component_type'
|
||||
|
||||
export default class ComponentsController {
|
||||
async index({ inertia, auth }: HttpContext) {
|
||||
const user = await auth.authenticate()
|
||||
const components = await Component.query()
|
||||
.preload('type')
|
||||
.where('userId', user.id)
|
||||
return inertia.render('components/index', { components })
|
||||
}
|
||||
|
||||
async create({ inertia }: HttpContext) {
|
||||
const types = await ComponentType.all()
|
||||
return inertia.render('components/create', { types })
|
||||
}
|
||||
|
||||
async store({ request, response, auth }: HttpContext) {
|
||||
const data = request.all()
|
||||
const user = await auth.authenticate()
|
||||
const { quantity, ...componentData } = await storeComponentValidator.validate(data)
|
||||
await ComponentType.findOrFail(componentData.typeId)
|
||||
for (let i = 0; i < quantity; i++) {
|
||||
await Component.create({
|
||||
...componentData,
|
||||
userId: user.id,
|
||||
})
|
||||
}
|
||||
response.redirect('/components')
|
||||
}
|
||||
|
||||
async show({ params, auth, inertia }: HttpContext) {
|
||||
const user = await auth.authenticate()
|
||||
const componentId = params.id
|
||||
const component = await Component.query()
|
||||
.preload('type')
|
||||
.where('userId', user.id)
|
||||
.andWhere('id', componentId)
|
||||
.firstOrFail()
|
||||
return inertia.render('components/show', { component })
|
||||
}
|
||||
|
||||
async edit({ params, auth, inertia }: HttpContext) {
|
||||
const user = await auth.authenticate()
|
||||
const types = await ComponentType.all()
|
||||
const componentId = params.id
|
||||
const component = await Component.query()
|
||||
.preload('type')
|
||||
.where('userId', user.id)
|
||||
.andWhere('id', componentId)
|
||||
.firstOrFail()
|
||||
return inertia.render('components/edit', { component, types })
|
||||
}
|
||||
|
||||
async update({ params, auth, request, response }: HttpContext) {
|
||||
const data = request.all()
|
||||
const componentData = await updateComponentValidator.validate(data)
|
||||
const user = await auth.authenticate()
|
||||
const component = await Component.query()
|
||||
.where('userId', user.id)
|
||||
.andWhere('id', params.id)
|
||||
.firstOrFail()
|
||||
component.merge(componentData)
|
||||
await component.save()
|
||||
return response.redirect('/components')
|
||||
}
|
||||
|
||||
async destroy({ params, response }: HttpContext) {
|
||||
const componentId = params.id
|
||||
const component = await Component.findOrFail(componentId)
|
||||
await component.delete()
|
||||
return response.redirect('/components')
|
||||
}
|
||||
}
|
||||
@@ -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')
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import User from '#models/user'
|
||||
import { signupValidator } from '#validators/user'
|
||||
import type { HttpContext } from '@adonisjs/core/http'
|
||||
|
||||
export default class NewAccountController {
|
||||
async create({ inertia }: HttpContext) {
|
||||
return inertia.render('auth/signup', {})
|
||||
}
|
||||
|
||||
async store({ request, response, auth }: HttpContext) {
|
||||
const payload = await request.validateUsing(signupValidator)
|
||||
const user = await User.create({ ...payload })
|
||||
|
||||
await auth.use('web').login(user)
|
||||
response.redirect().toRoute('home')
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import type { HttpContext } from '@adonisjs/core/http'
|
||||
import { loginValidator } from '#validators/Auth/login'
|
||||
import User from '#models/user'
|
||||
|
||||
export default class SessionController {
|
||||
async create({ inertia }: HttpContext) {
|
||||
return inertia.render('auth/login', {})
|
||||
}
|
||||
|
||||
async store({ request, auth, response }: HttpContext) {
|
||||
const payload = await request.validateUsing(loginValidator)
|
||||
const user = await User.verifyCredentials(payload.email, payload.password)
|
||||
await auth.use('web').login(user)
|
||||
response.redirect('/computers')
|
||||
}
|
||||
|
||||
async destroy({ auth, response }: HttpContext) {
|
||||
await auth.use('web').logout()
|
||||
response.redirect('/auth/login')
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user