Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
"main": "dist/src/lib/index.js",
"types": "dist/src/lib/index.d.ts",
"scripts": {
"migrate": "dotenv -e ../.env -- kysely migrate",
"db:up": "yarn migrate latest",
"test": "vitest --watch=false --no-file-parallelism",
"dev": "yarn build && yarn start",
"generate-translation-schema": "node scripts/generate-translation-schema.js",
Expand All @@ -27,6 +25,8 @@
"link-in-web": "ts-node --skipProject scripts/link-in-app.ts sill-web",
"db:seed": "yarn build && dotenv -e ../.env -- node dist/scripts/seed.js",
"typecheck": "tsc --noEmit",
"migrate": "dotenv -e ../.env -- kysely migrate",
"db:up": "yarn migrate latest",
"dev:db:up": "docker compose -f ../docker-compose.resources.yml up -d",
"dev:db:down": "docker compose -f ../docker-compose.resources.yml down",
"dev:db:flush": "rm -rf ../docker-data",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export const createPgInstanceRepository = (db: Kysely<Database>): InstanceReposi
const { mainSoftwareSillId, organization, targetAudience, instanceUrl, isPublic, ...rest } = formData;
assert<Equals<typeof rest, {}>>();

const now = Date.now();
const now = new Date();
const { instanceId } = await db
.insertInto("instances")
.values({
Expand All @@ -35,7 +35,7 @@ export const createPgInstanceRepository = (db: Kysely<Database>): InstanceReposi
const { mainSoftwareSillId, organization, targetAudience, instanceUrl, isPublic, ...rest } = formData;
assert<Equals<typeof rest, {}>>();

const now = Date.now();
const now = new Date();
await db
.updateTable("instances")
.set({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@
import { Kysely } from "kysely";
import { DatabaseDataType, PopulatedExternalData, SoftwareExternalDataRepository } from "../../../ports/DbApiV2";
import { Database, DatabaseRowOutput } from "./kysely.database";
import { stripNullOrUndefinedValues, transformNullToUndefined, parseBigIntToNumber } from "./kysely.utils";
import { stripNullOrUndefinedValues, transformNullToUndefined } from "./kysely.utils";
import { mergeArrays } from "../../../utils";
import merge from "deepmerge";

const cleanDataForExternalData = (row: DatabaseRowOutput.SoftwareExternalData) =>
transformNullToUndefined(parseBigIntToNumber(row, ["lastDataFetchAt"]));
const cleanDataForExternalData = (row: DatabaseRowOutput.SoftwareExternalData) => transformNullToUndefined(row);

const mergeExternalData = (externalData: PopulatedExternalData[]) => {
if (externalData.length === 0) return undefined;
Expand Down Expand Up @@ -113,9 +112,9 @@ export const createPgSoftwareExternalDataRepository = (db: Kysely<Database>): So
let request = db.selectFrom("software_external_datas").select(["externalId", "sourceSlug"]);

if (minuteSkipSince) {
const dateNum = new Date().valueOf() - minuteSkipSince * 1000 * 60;
const thresholdDate = new Date(Date.now() - minuteSkipSince * 1000 * 60);
request = request.where(eb =>
eb.or([eb("lastDataFetchAt", "is", null), eb("lastDataFetchAt", "<", dateNum)])
eb.or([eb("lastDataFetchAt", "is", null), eb("lastDataFetchAt", "<", thresholdDate)])
);
}

Expand Down Expand Up @@ -216,7 +215,7 @@ export const createPgSoftwareExternalDataRepository = (db: Kysely<Database>): So
.select(["s.kind", "s.priority", "s.url", "s.slug"])
.where("softwareId", "=", softwareId)
.execute();
const cleanResult = result.map(row => transformNullToUndefined(parseBigIntToNumber(row, ["lastDataFetchAt"])));
const cleanResult = result.map(row => transformNullToUndefined(row));

if (!cleanResult) return undefined;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ export const createPgSoftwareRepository = (db: Kysely<Database>): SoftwareReposi

assert<Equals<typeof rest, {}>>();

const now = Date.now();
const now = new Date();

return db.transaction().execute(async trx => {
const { softwareId } = await trx
Expand Down Expand Up @@ -106,7 +106,7 @@ export const createPgSoftwareRepository = (db: Kysely<Database>): SoftwareReposi

assert<Equals<typeof rest, {}>>();

const now = Date.now();
const now = new Date();
await db
.updateTable("softwares")
.set({
Expand Down
10 changes: 5 additions & 5 deletions api/src/core/adapters/dbApi/kysely/kysely.database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,8 @@ type InstancesTable = {
instanceUrl: string | null;
isPublic: boolean;
addedByUserId: number;
referencedSinceTime: number;
updateTime: number;
referencedSinceTime: Date;
updateTime: Date;
};

type ExternalId = string;
Expand Down Expand Up @@ -157,7 +157,7 @@ export type SoftwareExternalDatasTable = {
referencePublications: JSONColumnType<ScholarlyArticle[]> | null;
publicationTime: Date | null;
identifiers: JSONColumnType<SchemaIdentifier[]> | null;
lastDataFetchAt: number | null;
lastDataFetchAt: Date | null;
providers: JSONColumnType<Array<SchemaOrganization>> | null;
};

Expand All @@ -173,8 +173,8 @@ type SoftwaresTable = {
id: Generated<number>;
name: string;
description: string;
referencedSinceTime: number;
updateTime: number;
referencedSinceTime: Date;
updateTime: Date;
dereferencing: JSONColumnType<{
reason?: string;
time: number;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
// SPDX-FileCopyrightText: 2021-2025 DINUM <[email protected]>
// SPDX-FileCopyrightText: 2024-2025 Université Grenoble Alpes
// SPDX-License-Identifier: MIT

import { Kysely, sql } from "kysely";

export async function up(db: Kysely<any>): Promise<void> {
await db.schema.alterTable("softwares").addColumn("referencedSinceTime_temp", "timestamptz").execute();
await sql`UPDATE softwares SET "referencedSinceTime_temp" = to_timestamp("referencedSinceTime" / 1000.0)`.execute(
db
);
await db.schema
.alterTable("softwares")
.alterColumn("referencedSinceTime_temp", col => col.setNotNull())
.execute();
await db.schema.alterTable("softwares").dropColumn("referencedSinceTime").execute();
await db.schema.alterTable("softwares").renameColumn("referencedSinceTime_temp", "referencedSinceTime").execute();

await db.schema.alterTable("softwares").addColumn("updateTime_temp", "timestamptz").execute();
await sql`UPDATE softwares SET "updateTime_temp" = to_timestamp("updateTime" / 1000.0)`.execute(db);
await db.schema
.alterTable("softwares")
.alterColumn("updateTime_temp", col => col.setNotNull())
.execute();
await db.schema.alterTable("softwares").dropColumn("updateTime").execute();
await db.schema.alterTable("softwares").renameColumn("updateTime_temp", "updateTime").execute();

await db.schema.alterTable("instances").addColumn("referencedSinceTime_temp", "timestamptz").execute();
await sql`UPDATE instances SET "referencedSinceTime_temp" = to_timestamp("referencedSinceTime" / 1000.0)`.execute(
db
);
await db.schema
.alterTable("instances")
.alterColumn("referencedSinceTime_temp", col => col.setNotNull())
.execute();
await db.schema.alterTable("instances").dropColumn("referencedSinceTime").execute();
await db.schema.alterTable("instances").renameColumn("referencedSinceTime_temp", "referencedSinceTime").execute();

await db.schema.alterTable("instances").addColumn("updateTime_temp", "timestamptz").execute();
await sql`UPDATE instances SET "updateTime_temp" = to_timestamp("updateTime" / 1000.0)`.execute(db);
await db.schema
.alterTable("instances")
.alterColumn("updateTime_temp", col => col.setNotNull())
.execute();
await db.schema.alterTable("instances").dropColumn("updateTime").execute();
await db.schema.alterTable("instances").renameColumn("updateTime_temp", "updateTime").execute();

await db.schema.alterTable("software_external_datas").addColumn("lastDataFetchAt_temp", "timestamptz").execute();
await sql`UPDATE software_external_datas SET "lastDataFetchAt_temp" = to_timestamp("lastDataFetchAt" / 1000.0) WHERE "lastDataFetchAt" IS NOT NULL`.execute(
db
);
await db.schema.alterTable("software_external_datas").dropColumn("lastDataFetchAt").execute();
await db.schema
.alterTable("software_external_datas")
.renameColumn("lastDataFetchAt_temp", "lastDataFetchAt")
.execute();
}

export async function down(db: Kysely<any>): Promise<void> {
await db.schema.alterTable("softwares").addColumn("referencedSinceTime_temp", "bigint").execute();
await sql`UPDATE softwares SET "referencedSinceTime_temp" = EXTRACT(EPOCH FROM "referencedSinceTime")::bigint * 1000`.execute(
db
);
await db.schema
.alterTable("softwares")
.alterColumn("referencedSinceTime_temp", col => col.setNotNull())
.execute();
await db.schema.alterTable("softwares").dropColumn("referencedSinceTime").execute();
await db.schema.alterTable("softwares").renameColumn("referencedSinceTime_temp", "referencedSinceTime").execute();

await db.schema.alterTable("softwares").addColumn("updateTime_temp", "bigint").execute();
await sql`UPDATE softwares SET "updateTime_temp" = EXTRACT(EPOCH FROM "updateTime")::bigint * 1000`.execute(db);
await db.schema
.alterTable("softwares")
.alterColumn("updateTime_temp", col => col.setNotNull())
.execute();
await db.schema.alterTable("softwares").dropColumn("updateTime").execute();
await db.schema.alterTable("softwares").renameColumn("updateTime_temp", "updateTime").execute();

await db.schema.alterTable("instances").addColumn("referencedSinceTime_temp", "bigint").execute();
await sql`UPDATE instances SET "referencedSinceTime_temp" = EXTRACT(EPOCH FROM "referencedSinceTime")::bigint * 1000`.execute(
db
);
await db.schema
.alterTable("instances")
.alterColumn("referencedSinceTime_temp", col => col.setNotNull())
.execute();
await db.schema.alterTable("instances").dropColumn("referencedSinceTime").execute();
await db.schema.alterTable("instances").renameColumn("referencedSinceTime_temp", "referencedSinceTime").execute();

await db.schema.alterTable("instances").addColumn("updateTime_temp", "bigint").execute();
await sql`UPDATE instances SET "updateTime_temp" = EXTRACT(EPOCH FROM "updateTime")::bigint * 1000`.execute(db);
await db.schema
.alterTable("instances")
.alterColumn("updateTime_temp", col => col.setNotNull())
.execute();
await db.schema.alterTable("instances").dropColumn("updateTime").execute();
await db.schema.alterTable("instances").renameColumn("updateTime_temp", "updateTime").execute();

await db.schema.alterTable("software_external_datas").addColumn("lastDataFetchAt_temp", "bigint").execute();
await sql`UPDATE software_external_datas SET "lastDataFetchAt_temp" = EXTRACT(EPOCH FROM "lastDataFetchAt")::bigint * 1000 WHERE "lastDataFetchAt" IS NOT NULL`.execute(
db
);
await db.schema.alterTable("software_external_datas").dropColumn("lastDataFetchAt").execute();
await db.schema
.alterTable("software_external_datas")
.renameColumn("lastDataFetchAt_temp", "lastDataFetchAt")
.execute();
}
2 changes: 1 addition & 1 deletion api/src/core/ports/DbApiV2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ export interface SoftwareExternalDataRepository {
sourceSlug: string;
externalId: string;
softwareId?: number;
lastDataFetchAt?: number;
lastDataFetchAt?: Date;
softwareExternalData: SoftwareExternalData;
}) => Promise<void>;
save: (params: { softwareExternalData: SoftwareExternalData; softwareId: number | undefined }) => Promise<void>; // TODO
Expand Down
2 changes: 1 addition & 1 deletion api/src/core/usecases/createSoftware.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ describe("Create software - Trying all the cases", () => {
"license": "MIT",
"logoUrl": "https://example.com/logo.png",
"name": "Create react app",
"referencedSinceTime": expect.any(String), // To format
"referencedSinceTime": expect.any(Date),
"softwareType": {
"type": "stack"
},
Expand Down
2 changes: 1 addition & 1 deletion api/src/core/usecases/createSoftware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export const formDataToSoftwareRow = (softwareForm: SoftwareFormData, userId: nu
license: softwareForm.softwareLicense,
logoUrl: softwareForm.softwareLogoUrl,
versionMin: softwareForm.softwareMinimalVersion,
referencedSinceTime: Date.now(),
referencedSinceTime: new Date(),
dereferencing: undefined,
isStillInObservation: false,
doRespectRgaa: softwareForm.doRespectRgaa ?? undefined,
Expand Down
4 changes: 2 additions & 2 deletions api/src/core/usecases/getPopulatedSoftware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,8 @@ const formatSoftwareRowToUISoftware = (
softwareId: software.id,
softwareDescription: software.description,
softwareName: software.name,
updateTime: new Date(+software.updateTime).getTime(),
addedTime: new Date(+software.referencedSinceTime).getTime(),
updateTime: software.updateTime.getTime(),
addedTime: software.referencedSinceTime.getTime(),
logoUrl: software.logoUrl,
applicationCategories: software.categories,
versionMin: software.versionMin,
Expand Down
14 changes: 7 additions & 7 deletions api/src/core/usecases/refreshExternalData.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ const insertApacheWithCorrectId = async (db: Kysely<Database>, userId: number) =
generalInfoMd: null,
addedByUserId: userId,
dereferencing: null,
referencedSinceTime: 1728462232094,
updateTime: 1728462232094
referencedSinceTime: new Date(1728462232094),
updateTime: new Date(1728462232094)
})
.execute();

Expand Down Expand Up @@ -104,8 +104,8 @@ const insertAcceleroWithCorrectId = async (db: Kysely<Database>, userId: number)
generalInfoMd: null,
addedByUserId: userId,
dereferencing: null,
referencedSinceTime: 1514764800000,
updateTime: 1514764800000
referencedSinceTime: new Date(1514764800000),
updateTime: new Date(1514764800000)
})
.execute();

Expand Down Expand Up @@ -266,7 +266,7 @@ describe("fetches software extra data (from different providers)", () => {
],
softwareVersion: "5.0.1",
publicationTime: new Date("2022-04-12T00:00:00.000Z"),
lastDataFetchAt: expect.any(Number),
lastDataFetchAt: expect.any(Date),
providers: []
},
{
Expand Down Expand Up @@ -316,7 +316,7 @@ describe("fetches software extra data (from different providers)", () => {
],
softwareVersion: expect.any(String),
publicationTime: expect.any(Date),
lastDataFetchAt: expect.any(Number),
lastDataFetchAt: expect.any(Date),
providers: []
}
]);
Expand Down Expand Up @@ -413,7 +413,7 @@ describe("fetches software extra data (from different providers)", () => {
programmingLanguages: ["C"],
softwareVersion: "2.5.0-alpha",
publicationTime: new Date("2017-11-08T00:00:00.000Z"),
lastDataFetchAt: expect.any(Number),
lastDataFetchAt: expect.any(Date),
providers: []
},
emptyExternalDataCleaned({
Expand Down
2 changes: 1 addition & 1 deletion api/src/core/usecases/refreshExternalData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ const refreshExternalDataByExternalIdAndSlug = async (args: {
await dbApi.softwareExternalData.update({
sourceSlug: source.slug,
externalId: externalId,
lastDataFetchAt: Date.now(),
lastDataFetchAt: new Date(),
softwareExternalData: externalData,
...(actualExternalDataRow?.softwareId ? { softwareId: actualExternalDataRow.softwareId } : {})
});
Expand Down
2 changes: 1 addition & 1 deletion api/src/core/usecases/updateSoftware.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ describe("Create software, than updates it adding a similar software", () => {
"license": "MIT",
"logoUrl": "https://example.com/logo.png",
"name": "Create react app",
"referencedSinceTime": expect.any(String), // To format
"referencedSinceTime": expect.any(Date),
"softwareType": {
"type": "stack"
},
Expand Down
4 changes: 2 additions & 2 deletions helm-charts/catalogi/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ apiVersion: v2
name: catalogi
description: A Helm chart for deploying the Catalogi open source software catalog.
type: application
version: 2.0.5
appVersion: 1.51.2
version: 2.0.6
appVersion: 1.51.3
dependencies:
- name: postgresql
version: '16'
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "sill",
"version": "1.51.2",
"version": "1.51.3",
"license": "MIT",
"private": true,
"scripts": {
Expand Down