Initial commit: PC Builder AdonisJS project

This commit is contained in:
Kevin
2026-06-28 10:41:51 +02:00
commit 648d0af538
144 changed files with 18570 additions and 0 deletions
+38
View File
@@ -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
}
+12
View File
@@ -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
}
+60
View File
@@ -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)
}
}
+27
View File
@@ -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
}
+9
View File
@@ -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
}
+30
View File
@@ -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
}