2024-10-12 11:52:13 +01:00
import UserBadgeListItem from "../entities/list/UserBadgeListItem" ;
2024-10-03 00:32:38 +01:00
import UserBadge from "../entities/UserBadge" ;
import Database from "../objects/Database" ;
import RepoBase from "./RepoBase" ;
export default abstract class UserBadgeRepo {
public static async selectById ( id :number ) {
const dbUserBadge = await Database . Instance . query ( "SELECT * FROM UserBadge WHERE Id = ? AND IsDeleted = 0 LIMIT 1" , [ id ] ) ;
if ( dbUserBadge == null || dbUserBadge . length === 0 ) {
return null ;
} else {
const userBadge = new UserBadge ( ) ;
populateUserBadgeFromDB ( userBadge , dbUserBadge [ 0 ] ) ;
return userBadge ;
}
}
2024-10-12 11:52:13 +01:00
public static async selectAll() {
const dbUserBadge = await Database . Instance . query ( "SELECT * FROM UserBadge WHERE IsDeleted = 0" , [ ] ) ;
const userBadges = new Array < UserBadge > ( ) ;
for ( const row of dbUserBadge ) {
const userBadge = new UserBadge ( ) ;
populateUserBadgeFromDB ( userBadge , row ) ;
userBadges . push ( userBadge ) ;
}
return userBadges ;
}
2024-10-08 09:41:47 +01:00
public static async selectByUserId ( userId :number ) {
2024-10-08 11:04:46 +01:00
const dbUserBadge = await Database . Instance . query ( "SELECT * FROM UserBadge WHERE UserId = ? AND IsDeleted = 0" , [ userId ] ) ;
2024-10-08 09:41:47 +01:00
const userBadges = new Array < UserBadge > ( ) ;
for ( const row of dbUserBadge ) {
const userBadge = new UserBadge ( ) ;
populateUserBadgeFromDB ( userBadge , row ) ;
userBadges . push ( userBadge ) ;
}
return userBadges ;
}
2024-10-03 00:32:38 +01:00
public static async selectByUserIdBadgeId ( userId :number , badgeId :number ) {
const dbUserBadge = await Database . Instance . query ( "SELECT * FROM UserBadge WHERE UserId = ? AND BadgeId = ? AND IsDeleted = 0 LIMIT 1" , [ userId , badgeId ] ) ;
if ( dbUserBadge == null || dbUserBadge . length === 0 ) {
return null ;
} else {
const userBadge = new UserBadge ( ) ;
populateUserBadgeFromDB ( userBadge , dbUserBadge [ 0 ] ) ;
return userBadge ;
}
}
2024-10-12 11:52:13 +01:00
public static async selectUnlockedBadgeCount() {
const countResult = await Database . Instance . query ( "SELECT COUNT(Id) FROM `UserBadge` WHERE IsDeleted = 0 LIMIT 1" , [ ] ) ;
return countResult [ 0 ] [ "COUNT(Id)" ] as number ;
}
public static async selectUnlockList ( badgeQuery? : string , userQuery? : string ) {
const dbUserBadgeListItems = await Database . Instance . query ( 'SELECT UserBadge.Id AS "Id", Badge.Id AS "BadgeId", `User`.`Username`, UserBadge.CreatedDatetime AS "UnlockDatetime" FROM UserBadge JOIN Badge ON Badge.Id = UserBadge.BadgeId AND Badge.IsDeleted = 0 JOIN `User` ON `User`.Id = UserBadge.UserId AND `User`.IsDeleted = 0 WHERE UserBadge.IsDeleted = 0 AND `User`.`Username` LIKE ? AND Badge.Name LIKE ?;' , [ userQuery ? ` % ${ userQuery } % ` : "%%" , badgeQuery ? ` % ${ badgeQuery } % ` : "%%" ] ) ;
const userBadgeListItems = new Array < UserBadgeListItem > ( ) ;
for ( const row of dbUserBadgeListItems ) {
const userBadgeListItem = new UserBadgeListItem ( ) ;
populateUserBadgeListItemFromDB ( userBadgeListItem , row ) ;
userBadgeListItems . push ( userBadgeListItem ) ;
}
return userBadgeListItems ;
}
2024-10-03 00:32:38 +01:00
public static async insertUpdate ( userBadge :UserBadge ) {
if ( userBadge . Id === Number . MIN_VALUE ) {
userBadge . Id = ( await Database . Instance . query ( "INSERT UserBadge (UserId, BadgeId, CreatedByUserId, CreatedDatetime, LastModifiedByUserId, LastModifiedDatetime, DeletedByUserId, DeletedDatetime, IsDeleted) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING Id;" , [
userBadge . UserId , userBadge . BadgeId , userBadge . CreatedByUserId , userBadge . CreatedDatetime . getTime ( ) , userBadge . LastModifiedByUserId ? ? null , userBadge . LastModifiedDatetime ? . getTime ( ) ? ? null , userBadge . DeletedByUserId ? ? null , userBadge . DeletedDatetime ? . getTime ( ) ? ? null , Number ( userBadge . IsDeleted )
] ) ) [ 0 ] [ "Id" ] ;
} else {
await Database . Instance . query ( ` UPDATE UserBadge SET UserId = ?, BadgeId = ?, CreatedByUserId = ?, CreatedDatetime = ?, LastModifiedByUserId = ?, LastModifiedDatetime = ?, DeletedByUserId = ?, DeletedDatetime = ?, IsDeleted = ? WHERE Id = ? ` , [
userBadge . UserId , userBadge . BadgeId , userBadge . CreatedByUserId , userBadge . CreatedDatetime . getTime ( ) , userBadge . LastModifiedByUserId ? ? null , userBadge . LastModifiedDatetime ? . getTime ( ) ? ? null , userBadge . DeletedByUserId ? ? null , userBadge . DeletedDatetime ? . getTime ( ) ? ? null , Number ( userBadge . IsDeleted ) , userBadge . Id
] ) ;
}
return userBadge ;
}
}
2024-10-12 11:52:13 +01:00
function populateUserBadgeFromDB ( userBadge :UserBadge , dbBadge :any ) {
userBadge . Id = dbBadge . Id ;
userBadge . UserId = dbBadge . UserId ;
userBadge . BadgeId = dbBadge . BadgeId ;
userBadge . CreatedByUserId = dbBadge . CreatedByUserId ;
userBadge . CreatedDatetime = new Date ( dbBadge . CreatedDatetime ) ;
userBadge . LastModifiedByUserId = dbBadge . LastModifiedByUserId ;
userBadge . LastModifiedDatetime = RepoBase . convertNullableDatetimeIntToDate ( dbBadge . LastModifiedDatetime ) ;
userBadge . DeletedByUserId = dbBadge . DeletedByUserId ;
userBadge . DeletedDatetime = RepoBase . convertNullableDatetimeIntToDate ( dbBadge . DeletedDatetime ) ;
userBadge . IsDeleted = dbBadge . IsDeleted [ 0 ] === 1 ;
}
function populateUserBadgeListItemFromDB ( userBadgeListItem :UserBadgeListItem , dbBadgeListItem :any ) {
userBadgeListItem . Id = dbBadgeListItem . Id ;
userBadgeListItem . BadgeId = dbBadgeListItem . BadgeId ;
userBadgeListItem . Username = dbBadgeListItem . Username ;
userBadgeListItem . UnlockDatetime = new Date ( dbBadgeListItem . UnlockDatetime ) ;
2024-10-03 00:32:38 +01:00
}