noot
Some checks failed
commit-tag / commit-tag-image (map[context:./migrations file:./migrations/Dockerfile name:migrations]) (push) Successful in 18s
commit-tag / commit-tag-image (map[context:./ts file:./ts/Dockerfile name:ts]) (push) Has been cancelled

This commit is contained in:
a 2025-03-02 19:12:28 -06:00
parent 7a2511db3b
commit 8672574427
No known key found for this signature in database
GPG Key ID: 2F22877AA4DFDADB
6 changed files with 33 additions and 27 deletions

View File

@ -1,4 +1,8 @@
create table if not exists wynn_guild_members ( create schema if not exists wynn;
create schema if not exists minecraft;
create schema if not exists discord;
create table if not exists wynn.guild_members (
guild_id UUID not null, guild_id UUID not null,
member_id UUID not null, member_id UUID not null,
rank text not null, rank text not null,
@ -7,7 +11,7 @@ create table if not exists wynn_guild_members (
primary key (guild_id, member_id), primary key (guild_id, member_id),
unique(member_id) unique(member_id)
); );
create table if not exists wynn_guild_info ( create table if not exists wynn.guild_info (
uid UUID not null, uid UUID not null,
name text not null, name text not null,
prefix text not null, prefix text not null,
@ -20,22 +24,22 @@ create table if not exists wynn_guild_info (
primary key (uid) primary key (uid)
); );
create index if not exists wynn_guild_info_xp on wynn_guild_info (xp); create index if not exists wynn.guild_info_xp on wynn.guild_info (xp);
create table if not exists wynn_guild_season_results ( create table if not exists wynn.guild_season_results (
guild_id UUID not null, guild_id UUID not null,
season text not null, season text not null,
rating bigint not null, rating bigint not null,
territories bigint not null, territories bigint not null,
primary key (guild_id, season) primary key (guild_id, season)
); );
create table if not exists minecraft_user ( create table if not exists minecraft.user (
uid UUID not null, uid UUID not null,
name text not null, name text not null,
server text, server text,
primary key (uid) primary key (uid)
); );
create table if not exists discord_guild_setting( create table if not exists discord.guild_setting(
discord_guild text not null, discord_guild text not null,
name text not null, name text not null,
value jsonb not null, value jsonb not null,
@ -50,4 +54,6 @@ drop table if exists wynn_guild_season_results;
drop table if exists minecraft_user; drop table if exists minecraft_user;
drop table if exists discord_guild_setting; drop table if exists discord_guild_setting;
drop schema if exists wynn cascade;
drop schema if exists minecraft cascade;
drop schema if exists discord cascade;

View File

@ -20,7 +20,7 @@ export async function update_all_guilds() {
const { sql } = await c.getAsync(PG) const { sql } = await c.getAsync(PG)
for(const [guild_name, guild] of Object.entries(parsed)){ for(const [guild_name, guild] of Object.entries(parsed)){
await sql`insert into wynn_guild_info await sql`insert into wynn.guild_info
(uid, name, prefix) (uid, name, prefix)
values values
(${guild.uuid}, ${guild_name}, ${guild.prefix}) (${guild.uuid}, ${guild_name}, ${guild.prefix})
@ -46,7 +46,7 @@ export async function update_guild({
const { db } = await c.getAsync(PG) const { db } = await c.getAsync(PG)
await db.begin(async (sql) => { await db.begin(async (sql) => {
await sql`insert into wynn_guild_info await sql`insert into wynn.guild_info
(uid, name, prefix, level, xp_percent, territories, wars, created) (uid, name, prefix, level, xp_percent, territories, wars, created)
values values
(${parsed.uuid}, ${parsed.name}, ${parsed.prefix}, ${parsed.level}, ${parsed.xpPercent}, ${parsed.territories}, ${parsed.wars}, ${parseDate(parsed.created)}) (${parsed.uuid}, ${parsed.name}, ${parsed.prefix}, ${parsed.level}, ${parsed.xpPercent}, ${parsed.territories}, ${parsed.wars}, ${parseDate(parsed.created)})
@ -62,7 +62,7 @@ export async function update_guild({
const {total, ...rest} = parsed.members const {total, ...rest} = parsed.members
for(const [rank_name, rank] of Object.entries(rest)){ for(const [rank_name, rank] of Object.entries(rest)){
for(const [userName, member] of Object.entries(rank)) { for(const [userName, member] of Object.entries(rank)) {
await sql`insert into wynn_guild_members await sql`insert into wynn.guild_members
(guild_id, member_id, rank, joined_at, contributed) values (guild_id, member_id, rank, joined_at, contributed) values
(${parsed.uuid}, ${member.uuid}, ${rank_name}, ${parseDate(member.joined)}, ${member.contributed}) (${parsed.uuid}, ${member.uuid}, ${rank_name}, ${parseDate(member.joined)}, ${member.contributed})
on conflict (guild_id, member_id) do update set on conflict (guild_id, member_id) do update set
@ -70,7 +70,7 @@ export async function update_guild({
joined_at = EXCLUDED.joined_at, joined_at = EXCLUDED.joined_at,
contributed = EXCLUDED.contributed contributed = EXCLUDED.contributed
` `
await sql`insert into minecraft_user await sql`insert into minecraft.user
(uid, name, server) values (${member.uuid}, ${userName}, ${member.server}) (uid, name, server) values (${member.uuid}, ${userName}, ${member.server})
on conflict (uid) do update set on conflict (uid) do update set
name = EXCLUDED.name, name = EXCLUDED.name,
@ -79,7 +79,7 @@ export async function update_guild({
} }
} }
for (const [season, seasonData] of Object.entries(parsed.seasonRanks)) { for (const [season, seasonData] of Object.entries(parsed.seasonRanks)) {
await sql`insert into wynn_guild_season_results await sql`insert into wynn.guild_season_results
(guild_id, season, rating, territories) values (guild_id, season, rating, territories) values
(${parsed.uuid}, ${season}, ${seasonData.rating}, ${seasonData.finalTerritories}) (${parsed.uuid}, ${season}, ${seasonData.rating}, ${seasonData.finalTerritories})
on conflict (guild_id, season) do update set on conflict (guild_id, season) do update set

View File

@ -20,7 +20,7 @@ export async function update_guild_levels() {
}).assert(ans.data) }).assert(ans.data)
const { sql } = await c.getAsync(PG) const { sql } = await c.getAsync(PG)
for(const [_, guild] of Object.entries(parsed)){ for(const [_, guild] of Object.entries(parsed)){
await sql`insert into wynn_guild_info await sql`insert into wynn.guild_info
(uid, name, prefix, xp, level) (uid, name, prefix, xp, level)
values values
(${guild.uuid}, ${guild.name}, ${guild.prefix}, ${guild.xp}, ${guild.level}) (${guild.uuid}, ${guild.name}, ${guild.prefix}, ${guild.xp}, ${guild.level})

View File

@ -72,7 +72,7 @@ export const scrape_online_players = async()=>{
for(const [playerName, server] of Object.entries(onlineList.players)){ for(const [playerName, server] of Object.entries(onlineList.players)){
// we do this optimistically without a tx, because temporal will probably handle // we do this optimistically without a tx, because temporal will probably handle
// the race, and the worst case is we do extra requests. // the race, and the worst case is we do extra requests.
const ans = await sql`select uid from minecraft_user where name = ${playerName} limit 1` const ans = await sql`select uid from minecraft.user where name = ${playerName} limit 1`
if(ans.length === 0){ if(ans.length === 0){
// the user doesn't exist, so we need to grab their uuid // the user doesn't exist, so we need to grab their uuid
try { try {
@ -90,7 +90,7 @@ export const scrape_online_players = async()=>{
} }
const uuid = parsedPlayer.data.player.id const uuid = parsedPlayer.data.player.id
// insert the user. // insert the user.
await sql`insert into minecraft_user (name, uid, server) values (${playerName}, ${uuid},${server}) await sql`insert into minecraft.user (name, uid, server) values (${playerName}, ${uuid},${server})
on conflict (uid) do update set on conflict (uid) do update set
name = EXCLUDED.name, name = EXCLUDED.name,
server = EXCLUDED.server server = EXCLUDED.server
@ -104,10 +104,10 @@ export const scrape_online_players = async()=>{
} }
} }
await sql.begin(async (sql)=>{ await sql.begin(async (sql)=>{
await sql`update minecraft_user set server = null` await sql`update minecraft.user set server = null`
for(const [playerName, server] of Object.entries(onlineList.players)){ for(const [playerName, server] of Object.entries(onlineList.players)){
try { try {
await sql`update minecraft_user set server = ${server} where name = ${playerName}` await sql`update minecraft.user set server = ${server} where name = ${playerName}`
}catch(e) { }catch(e) {
log.warn(`failed to update server for ${playerName}`, { log.warn(`failed to update server for ${playerName}`, {
"err": e, "err": e,

View File

@ -17,7 +17,7 @@ with ranked as (select
territories, territories,
wars, wars,
rank() over (order by xp desc) as xp_rank rank() over (order by xp desc) as xp_rank
from wynn_guild_info from wynn.guild_info
) )
select * from ranked select * from ranked
where ranked.uid = ${guild_id} where ranked.uid = ${guild_id}
@ -52,11 +52,11 @@ export const formGuildOnlineMessage = async (guild_id: string, sql:Sql): Promise
name, name,
rank, rank,
contributed, contributed,
minecraft_user.server as server minecraft.user.server as server
from wynn_guild_members inner join minecraft_user from wynn.guild_members inner join minecraft.user
on minecraft_user.uid = wynn_guild_members.member_id on minecraft.user.uid = wynn.guild_members.member_id
where minecraft_user.server is not null where minecraft.user.server is not null
and wynn_guild_members.guild_id = ${guild_id} and wynn.guild_members.guild_id = ${guild_id}
` `
const members = type({ const members = type({
name: "string", name: "string",
@ -98,9 +98,9 @@ export const formGuildLeaderboardMessage = async (guild_id: string, sql:Sql): Pr
name, name,
rank, rank,
contributed contributed
from wynn_guild_members inner join minecraft_user from wynn.guild_members inner join minecraft.user
on minecraft_user.uid = wynn_guild_members.member_id on minecraft.user.uid = wynn.guild_members.member_id
where wynn_guild_members.guild_id = ${guild_id} where wynn.guild_members.guild_id = ${guild_id}
` `
const members = type({ const members = type({
name: "string", name: "string",

View File

@ -24,7 +24,7 @@ export class WApi {
setupCache(c, { setupCache(c, {
interpretHeader: true, interpretHeader: true,
ttl: 5 * 1000, ttl: 5000,
storage: buildStorage({ storage: buildStorage({
async find(key, currentRequest) { async find(key, currentRequest) {
const value = await store.get({key}) const value = await store.get({key})