Initial commit: PC Builder AdonisJS project
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import { DateTime } from 'luxon'
|
||||
import { BaseModel, belongsTo, column } from '@adonisjs/lucid/orm'
|
||||
import ComponentType from '#models/component_type'
|
||||
import type { BelongsTo } from '@adonisjs/lucid/types/relations'
|
||||
|
||||
export default class Component extends BaseModel {
|
||||
@column({ isPrimary: true })
|
||||
declare id: number
|
||||
|
||||
@column()
|
||||
declare name: string
|
||||
|
||||
@column()
|
||||
declare price: number
|
||||
|
||||
@column({ serializeAs: null })
|
||||
declare typeId: number
|
||||
|
||||
@belongsTo(() => ComponentType, {
|
||||
foreignKey: 'typeId',
|
||||
})
|
||||
declare type: BelongsTo<typeof ComponentType>
|
||||
|
||||
@column()
|
||||
declare computerId: number | null
|
||||
|
||||
@column({ serializeAs: null })
|
||||
declare userId: number
|
||||
|
||||
@column.date()
|
||||
declare purchaseDate: DateTime
|
||||
|
||||
@column.dateTime({ autoCreate: true })
|
||||
declare createdAt: DateTime
|
||||
|
||||
@column.dateTime({ autoCreate: true, autoUpdate: true })
|
||||
declare updatedAt: DateTime | null
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
import { BaseModel, column } from '@adonisjs/lucid/orm'
|
||||
|
||||
export default class ComponentType extends BaseModel {
|
||||
@column({ isPrimary: true })
|
||||
declare id: number
|
||||
|
||||
@column()
|
||||
declare name: string
|
||||
|
||||
@column()
|
||||
declare unique: boolean
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
import { DateTime } from 'luxon'
|
||||
import { BaseModel, belongsTo, column, computed, hasMany } from '@adonisjs/lucid/orm'
|
||||
import type { BelongsTo, HasMany } from '@adonisjs/lucid/types/relations'
|
||||
import ComputerState from '#models/computer_state'
|
||||
import ComputerPicture from '#models/computer_picture'
|
||||
import Component from '#models/component'
|
||||
|
||||
export default class Computer extends BaseModel {
|
||||
@column({ isPrimary: true })
|
||||
declare id: number
|
||||
|
||||
@column()
|
||||
declare title: string
|
||||
|
||||
@column()
|
||||
declare sellPrice: number
|
||||
|
||||
@column()
|
||||
declare gpuScore: number
|
||||
|
||||
@column()
|
||||
declare cpuScore: number
|
||||
|
||||
@column()
|
||||
declare globalScore: number
|
||||
|
||||
@column({ serializeAs: null })
|
||||
declare stateId: number
|
||||
|
||||
@belongsTo(() => ComputerState, {
|
||||
foreignKey: 'stateId',
|
||||
})
|
||||
declare state: BelongsTo<typeof ComputerState>
|
||||
|
||||
@hasMany(() => Component)
|
||||
declare components: HasMany<typeof Component>
|
||||
|
||||
@hasMany(() => ComputerPicture, {
|
||||
foreignKey: 'computerId',
|
||||
})
|
||||
declare pictures: HasMany<typeof ComputerPicture>
|
||||
|
||||
@column({ serializeAs: null })
|
||||
declare userId: number
|
||||
|
||||
@column.dateTime({ autoCreate: true })
|
||||
declare createdAt: DateTime
|
||||
|
||||
@column.dateTime({ autoCreate: true, autoUpdate: true })
|
||||
declare updatedAt: DateTime | null
|
||||
|
||||
@computed()
|
||||
get cost(): number {
|
||||
if (!this.$preloaded.components) {
|
||||
console.warn('Components not preloaded, cost may be incorrect')
|
||||
return 0
|
||||
}
|
||||
return this.components.reduce((total, component) => total + Number(component.price), 0)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
import { DateTime } from 'luxon'
|
||||
import { BaseModel, belongsTo, column } from '@adonisjs/lucid/orm'
|
||||
import Computer from '#models/computer'
|
||||
import type { BelongsTo } from '@adonisjs/lucid/types/relations'
|
||||
|
||||
export default class ComputerPicture extends BaseModel {
|
||||
@column({ isPrimary: true })
|
||||
declare id: number
|
||||
|
||||
@column()
|
||||
declare computerId: number
|
||||
|
||||
@column()
|
||||
declare link: string
|
||||
|
||||
@column()
|
||||
declare order: number
|
||||
|
||||
@belongsTo(() => Computer)
|
||||
declare computer: BelongsTo<typeof Computer>
|
||||
|
||||
@column.dateTime({ autoCreate: true })
|
||||
declare createdAt: DateTime
|
||||
|
||||
@column.dateTime({ autoCreate: true, autoUpdate: true })
|
||||
declare updatedAt: DateTime | null
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import { BaseModel, column } from '@adonisjs/lucid/orm'
|
||||
|
||||
export default class ComputerState extends BaseModel {
|
||||
@column({ isPrimary: true })
|
||||
declare id: number
|
||||
|
||||
@column()
|
||||
declare name: string
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
import { DateTime } from 'luxon'
|
||||
import hash from '@adonisjs/core/services/hash'
|
||||
import { compose } from '@adonisjs/core/helpers'
|
||||
import { BaseModel, column } from '@adonisjs/lucid/orm'
|
||||
import { withAuthFinder } from '@adonisjs/auth/mixins/lucid'
|
||||
|
||||
const AuthFinder = withAuthFinder(() => hash.use('scrypt'), {
|
||||
uids: ['email'],
|
||||
passwordColumnName: 'password',
|
||||
})
|
||||
|
||||
export default class User extends compose(BaseModel, AuthFinder) {
|
||||
@column({ isPrimary: true })
|
||||
declare id: number
|
||||
|
||||
@column()
|
||||
declare name: string | null
|
||||
|
||||
@column()
|
||||
declare email: string
|
||||
|
||||
@column({ serializeAs: null })
|
||||
declare password: string
|
||||
|
||||
@column.dateTime({ autoCreate: true })
|
||||
declare createdAt: DateTime
|
||||
|
||||
@column.dateTime({ autoCreate: true, autoUpdate: true })
|
||||
declare updatedAt: DateTime | null
|
||||
}
|
||||
Reference in New Issue
Block a user