Close remaining web gaps: rich profile, login history, lightbox/slider, flash client, admin chatlog/DJ/chart/WYSIWYG, niche API
- Rich profile (/u/[username]): wallet (credits/duckets/diamonds), friends grid (messenger_friendships), and owned rooms sections. - Login history: new website_login_logs table (model + migration 0007), recorded on every successful sign-in (ip + user-agent), surfaced on a new /settings/sessions page (with failed-attempt list from failed_logins). - Photos lightbox + home article slider (client components, no Swiper dep). - /client/flash launcher (SSO ticket like the Nitro page). - Admin: private chatlogs section in /admin/logs, /admin/radio/moderation (shout moderation), a "users by rank" inline bar chart on the dashboard, and a TinyMCE rich-text editor on the article admin forms. - Niche API: /api/values/[id], /api/guilds(+/[id]), /api/radio/auto-play. Verified live (prod, amx_test): login recorded → /settings/sessions shows it with device; profile renders wallet/friends/rooms; dashboard chart + private-chat logs + /client/flash + /api/guilds all OK. Reverted test data. tsc 0, vitest 49/49, next build 0.
This commit is contained in:
1 parent
f7b3845131
commit
4dfe698009
25 files changed
+1463
-64
No files matched your search
@@ -0,0 +1,11 @@
|
||||
-- Successful-login history (the AtomCMS "session logs" equivalent; our auth is
|
||||
-- stateless JWT so there's no sessions table). Idempotent (MariaDB).
|
||||
CREATE TABLE IF NOT EXISTS website_login_logs (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
user_id INT NOT NULL,
|
||||
ip VARCHAR(45) NOT NULL,
|
||||
user_agent VARCHAR(512) NULL,
|
||||
created_at TIMESTAMP NULL,
|
||||
PRIMARY KEY (id),
|
||||
KEY website_login_logs_user_id_idx (user_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
@@ -1687,6 +1687,17 @@ model WebsiteWriteableBoxes {
|
||||
@@map("website_writeable_boxes")
|
||||
}
|
||||
|
||||
model WebsiteLoginLogs {
|
||||
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
|
||||
userId Int @map("user_id")
|
||||
ip String @db.VarChar(45)
|
||||
userAgent String? @map("user_agent") @db.VarChar(512)
|
||||
createdAt DateTime? @map("created_at") @db.Timestamp(0)
|
||||
|
||||
@@index([userId])
|
||||
@@map("website_login_logs")
|
||||
}
|
||||
|
||||
model WebsiteBetaCodes {
|
||||
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
|
||||
code String @unique @db.VarChar(255)
|
||||
|
||||
Reference in new issue
Block a user