feat: Moves api controller to it's own module.

This commit is contained in:
2025-01-25 15:54:02 -05:00
parent 67e689b51e
commit 0fad024350
14 changed files with 234 additions and 80 deletions

View File

@@ -0,0 +1,55 @@
import DatabaseClientLive
import Dependencies
import FluentSQLiteDriver
import SharedModels
import Vapor
struct GenerateAdminUserCommand: AsyncCommand {
struct Signature: CommandSignature {
@Option(name: "username", short: "u")
var userame: String?
@Option(name: "email", short: "e")
var email: String?
@Option(name: "password", short: "p")
var password: String?
}
var help: String {
"Generate admin user in the database."
}
func run(using context: CommandContext, signature: Signature) async throws {
let database = DatabaseClient.live(database: context.application.db(.sqlite))
let username = signature.userame ?? Environment.get("ADMIN_USERNAME")
guard let username else {
throw Abort(.badRequest, reason: "Username not provided or found in the environment.")
}
let email = signature.email ?? Environment.get("ADMIN_EMAIL")
guard let email else {
throw Abort(.badRequest, reason: "Email not provided or found in the environment.")
}
let password = signature.password ?? Environment.get("ADMIN_PASSWORD")
guard let password else {
throw Abort(.badRequest, reason: "Password not provided or found in the environment.")
}
let adminUser = User.Create(
username: username,
email: email,
password: password,
confirmPassword: password
)
_ = try await database.users.create(adminUser)
context.console.print("Generated admin user: \(adminUser.username)")
}
}

View File

@@ -0,0 +1,63 @@
#if DEBUG
import DatabaseClientLive
import Dependencies
import FluentSQLiteDriver
import SharedModels
import Vapor
struct SeedCommand: AsyncCommand {
struct Signature: CommandSignature {}
var help: String {
"Generate random seed database."
}
func run(using context: CommandContext, signature: Signature) async throws {
let database = DatabaseClient.live(database: context.application.db(.sqlite))
var users: [User] = []
var employees: [Employee] = []
var vendors: [Vendor] = []
var vendorBranches: [VendorBranch] = []
let adminUser = User.Create(
username: Environment.get("ADMIN_USERNAME") ?? "admin",
email: Environment.get("ADMIN_EMAIL") ?? "admin@development.com",
password: Environment.get("ADMIN_PASSWORD") ?? "super-secret",
confirmPassword: Environment.get("ADMIN_PASSWORD") ?? "super-secret"
)
_ = try await database.users.create(adminUser)
for user in User.Create.generateMocks() {
let created = try await database.users.create(user)
users.append(created)
}
for employee in Employee.Create.generateMocks() {
let created = try await database.employees.create(employee)
employees.append(created)
}
for vendor in Vendor.Create.generateMocks() {
let created = try await database.vendors.create(vendor)
vendors.append(created)
}
for branch in VendorBranch.Create.generateMocks(vendors: vendors) {
let created = try await database.vendorBranches.create(branch)
vendorBranches.append(created)
}
for purchaseOrder in PurchaseOrder.CreateIntermediate.generateMocks(
employees: employees,
vendorBranches: vendorBranches
) {
_ = try await database.purchaseOrders.create(
purchaseOrder.toCreate(createdByID: users.randomElement()!.id)
)
}
}
}
#endif