feat: update language leaderboard calculation

This commit is contained in:
2024-08-09 21:45:14 +07:00
parent a5cd6383f3
commit 0142224f60
19 changed files with 330 additions and 59 deletions
+2 -1
View File
@@ -1,2 +1,3 @@
export { users } from "./users";
export { repositories } from "./repositories";
export { repositories, repositoriesRelations } from "./repositories";
export { repoLanguages, repoLanguagesRelations } from "./repo-languages";
+35
View File
@@ -0,0 +1,35 @@
import { InferInsertModel, InferSelectModel, relations } from "drizzle-orm";
import {
text,
sqliteTable,
integer,
index,
real,
} from "drizzle-orm/sqlite-core";
import { repositories } from "./repositories";
export const repoLanguages = sqliteTable(
"repository_languages",
{
id: integer("id").primaryKey({ autoIncrement: true }),
repoId: integer("repo_id")
.notNull()
.references(() => repositories.id),
name: text("name").notNull(),
percentage: real("percentage").notNull(),
},
(t) => ({
nameIdx: index("repository_languages_name_idx").on(t.name),
})
);
export const repoLanguagesRelations = relations(repoLanguages, ({ one }) => ({
repository: one(repositories, {
fields: [repoLanguages.repoId],
references: [repositories.id],
}),
}));
export type RepositoryLanguage = InferSelectModel<typeof repoLanguages>;
export type CreateRepositoryLanguage = InferInsertModel<typeof repoLanguages>;
+12 -3
View File
@@ -1,7 +1,13 @@
import { Contributor, Language } from "@server/lib/github";
import { InferInsertModel, InferSelectModel, sql } from "drizzle-orm";
import { Contributor } from "@server/lib/github";
import {
InferInsertModel,
InferSelectModel,
relations,
sql,
} from "drizzle-orm";
import { text, sqliteTable, integer, index } from "drizzle-orm/sqlite-core";
import { users } from "./users";
import { repoLanguages } from "./repo-languages";
export const repositories = sqliteTable(
"repositories",
@@ -17,7 +23,6 @@ export const repositories = sqliteTable(
stars: integer("stars").notNull(),
forks: integer("forks").notNull(),
lastUpdate: text("last_update").notNull(),
languages: text("languages", { mode: "json" }).$type<Language[]>(),
contributors: text("contributors", { mode: "json" }).$type<Contributor[]>(),
isPending: integer("is_pending", { mode: "boolean" })
@@ -39,5 +44,9 @@ export const repositories = sqliteTable(
})
);
export const repositoriesRelations = relations(repositories, ({ many }) => ({
languages: many(repoLanguages),
}));
export type Repository = InferSelectModel<typeof repositories>;
export type CreateRepository = InferInsertModel<typeof repositories>;