From 1299d939e0c295c6fff8cca2eb0c852a30c05cc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <git@minelli.swiss> Date: Tue, 25 Feb 2025 17:26:47 +0100 Subject: [PATCH] DB => Add creation date info for assignments and exercises --- .../migration.sql | 16 + ExpressAPI/prisma/schema.prisma | 2 + ExpressAPI/prisma/seed.ts | 674 +++++++++--------- ExpressAPI/src/routes/AssignmentRoutes.ts | 1 + ExpressAPI/src/routes/ExerciseRoutes.ts | 1 + 5 files changed, 358 insertions(+), 336 deletions(-) create mode 100644 ExpressAPI/prisma/migrations/20250225160246_exercises_and_assignments_add_creation_date/migration.sql diff --git a/ExpressAPI/prisma/migrations/20250225160246_exercises_and_assignments_add_creation_date/migration.sql b/ExpressAPI/prisma/migrations/20250225160246_exercises_and_assignments_add_creation_date/migration.sql new file mode 100644 index 0000000..4e6ff03 --- /dev/null +++ b/ExpressAPI/prisma/migrations/20250225160246_exercises_and_assignments_add_creation_date/migration.sql @@ -0,0 +1,16 @@ +/* + Warnings: + + - Added the required column `gitlabCreationDate` to the `Assignment` table without a default value. This is not possible if the table is not empty. + - Added the required column `gitlabCreationDate` to the `Exercise` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE `Assignment` ADD COLUMN `gitlabCreationDate` DATETIME(3) NULL AFTER `gitlabCreationInfo`; +UPDATE `Assignment` SET `gitlabCreationDate` = `gitlabLastInfoDate`; +ALTER TABLE `Assignment` MODIFY COLUMN `gitlabCreationDate` DATETIME(3) NOT NULL AFTER `gitlabCreationInfo`; + +-- AlterTable +ALTER TABLE `Exercise` ADD COLUMN `gitlabCreationDate` DATETIME(3) NULL DEFAULT NULL AFTER `gitlabCreationInfo`; +UPDATE `Exercise` SET `gitlabCreationDate` = `gitlabLastInfoDate`; +ALTER TABLE `Exercise` MODIFY COLUMN `gitlabCreationDate` DATETIME(3) NOT NULL AFTER `gitlabCreationInfo`; diff --git a/ExpressAPI/prisma/schema.prisma b/ExpressAPI/prisma/schema.prisma index b9fc889..ed1cd36 100644 --- a/ExpressAPI/prisma/schema.prisma +++ b/ExpressAPI/prisma/schema.prisma @@ -38,6 +38,7 @@ model Assignment { gitlabId Int gitlabLink String gitlabCreationInfo Json @db.Json + gitlabCreationDate DateTime gitlabLastInfo Json @db.Json gitlabLastInfoDate DateTime published Boolean @default(false) @@ -55,6 +56,7 @@ model Exercise { gitlabId Int gitlabLink String gitlabCreationInfo Json @db.Json + gitlabCreationDate DateTime gitlabLastInfo Json @db.Json gitlabLastInfoDate DateTime deleted Boolean @default(false) diff --git a/ExpressAPI/prisma/seed.ts b/ExpressAPI/prisma/seed.ts index 6ac1a5d..9154ef5 100644 --- a/ExpressAPI/prisma/seed.ts +++ b/ExpressAPI/prisma/seed.ts @@ -1,13 +1,12 @@ // ATTENTION : This line MUST be the first of this file import '../src/init.js'; -import * as process from 'process'; -import SharedConfig from '../src/shared/config/SharedConfig.js'; -import { UserRole } from '@prisma/client'; -import logger from '../src/shared/logging/WinstonLogger.js'; -import db from '../src/helpers/DatabaseHelper.js'; -import TagManager from '../src/managers/TagManager'; -import { TagType } from '@prisma/client'; +import * as process from 'process'; +import SharedConfig from '../src/shared/config/SharedConfig.js'; +import { TagType, UserRole } from '@prisma/client'; +import logger from '../src/shared/logging/WinstonLogger.js'; +import db from '../src/helpers/DatabaseHelper.js'; + async function main() { await users(); @@ -218,6 +217,7 @@ async function assignments() { 'issue_branch_template' : null, 'autoclose_referenced_issues' : true }, + gitlabCreationDate: new Date('2021-10-14T14:20:15.239Z'), gitlabLastInfo : { 'id' : 13862, 'description' : 'Dojo assignment repository.\n\nName of the assignment: c_hello_world', @@ -473,6 +473,7 @@ async function assignments() { 'issue_branch_template' : null, 'autoclose_referenced_issues' : true }, + gitlabCreationDate: new Date('2023-11-07T20:35:54.692Z'), gitlabLastInfo : { 'id' : 13893, 'description' : 'Dojo assignment repository.\n\nName of the assignment: Technique de compilation - TP', @@ -766,6 +767,7 @@ async function exercises() { 'issue_branch_template' : null, 'autoclose_referenced_issues' : true }, + gitlabCreationDate: new Date('2023-12-14T14:54:35.692Z'), gitlabLastInfo : { 'id' : 14232, 'description' : 'Dojo exercise repository based on the the assignment: Technique de compilation - TP', @@ -1586,379 +1588,379 @@ async function results() { async function tag() { await db.tag.upsert({ - where : { name: 'C' }, - update: {}, - create: { - name : 'C', - type : TagType.LANGUAGE - } - }); + where : { name: 'C' }, + update: {}, + create: { + name: 'C', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Java' }, - update: {}, - create: { - name : 'Java', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Java' }, + update: {}, + create: { + name: 'Java', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Scala' }, - update: {}, - create: { - name : 'Scala', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Scala' }, + update: {}, + create: { + name: 'Scala', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Kotlin' }, - update: {}, - create: { - name : 'Kotlin', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Kotlin' }, + update: {}, + create: { + name: 'Kotlin', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Rust' }, - update: {}, - create: { - name : 'Rust', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Rust' }, + update: {}, + create: { + name: 'Rust', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'JavaScript' }, - update: {}, - create: { - name : 'JavaScript', - type : TagType.LANGUAGE, - } - }); + where : { name: 'JavaScript' }, + update: {}, + create: { + name: 'JavaScript', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'TypeScript' }, - update: {}, - create: { - name : 'TypeScript', - type : TagType.LANGUAGE, - } - }); + where : { name: 'TypeScript' }, + update: {}, + create: { + name: 'TypeScript', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Python' }, - update: {}, - create: { - name : 'Python', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Python' }, + update: {}, + create: { + name: 'Python', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'HTML' }, - update: {}, - create: { - name : 'HTML', - type : TagType.LANGUAGE, - } - }); + where : { name: 'HTML' }, + update: {}, + create: { + name: 'HTML', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'CSS' }, - update: {}, - create: { - name : 'CSS', - type : TagType.LANGUAGE, - } - }); + where : { name: 'CSS' }, + update: {}, + create: { + name: 'CSS', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'C++' }, - update: {}, - create: { - name : 'C++', - type : TagType.LANGUAGE, - } - }); + where : { name: 'C++' }, + update: {}, + create: { + name: 'C++', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Go' }, - update: {}, - create: { - name : 'Go', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Go' }, + update: {}, + create: { + name: 'Go', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'PHP' }, - update: {}, - create: { - name : 'PHP', - type : TagType.LANGUAGE, - } - }); + where : { name: 'PHP' }, + update: {}, + create: { + name: 'PHP', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'C#' }, - update: {}, - create: { - name : 'C#', - type : TagType.LANGUAGE, - } - }); + where : { name: 'C#' }, + update: {}, + create: { + name: 'C#', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Swift' }, - update: {}, - create: { - name : 'Swift', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Swift' }, + update: {}, + create: { + name: 'Swift', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Matlab' }, - update: {}, - create: { - name : 'Matlab', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Matlab' }, + update: {}, + create: { + name: 'Matlab', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'SQL' }, - update: {}, - create: { - name : 'SQL', - type : TagType.LANGUAGE, - } - }); + where : { name: 'SQL' }, + update: {}, + create: { + name: 'SQL', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Assembly' }, - update: {}, - create: { - name : 'Assembly', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Assembly' }, + update: {}, + create: { + name: 'Assembly', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Ruby' }, - update: {}, - create: { - name : 'Ruby', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Ruby' }, + update: {}, + create: { + name: 'Ruby', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Fortran' }, - update: {}, - create: { - name : 'Fortran', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Fortran' }, + update: {}, + create: { + name: 'Fortran', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Pascal' }, - update: {}, - create: { - name : 'Pascal', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Pascal' }, + update: {}, + create: { + name: 'Pascal', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Visual Basic' }, - update: {}, - create: { - name : 'Visual Basic', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Visual Basic' }, + update: {}, + create: { + name: 'Visual Basic', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'R' }, - update: {}, - create: { - name : 'R', - type : TagType.LANGUAGE, - } - }); + where : { name: 'R' }, + update: {}, + create: { + name: 'R', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Objective-C' }, - update: {}, - create: { - name : 'Objective-C', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Objective-C' }, + update: {}, + create: { + name: 'Objective-C', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Lua' }, - update: {}, - create: { - name : 'Lua', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Lua' }, + update: {}, + create: { + name: 'Lua', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Ada' }, - update: {}, - create: { - name : 'Ada', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Ada' }, + update: {}, + create: { + name: 'Ada', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Haskell' }, - update: {}, - create: { - name : 'Haskell', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Haskell' }, + update: {}, + create: { + name: 'Haskell', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Shell/PowerShell' }, - update: {}, - create: { - name : 'Shell/PowerShell', - type : TagType.LANGUAGE, - } - }); + where : { name: 'Shell/PowerShell' }, + update: {}, + create: { + name: 'Shell/PowerShell', + type: TagType.LANGUAGE + } + }); await db.tag.upsert({ - where : { name: 'Express' }, - update: {}, - create: { - name : 'Express', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Express' }, + update: {}, + create: { + name: 'Express', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Django' }, - update: {}, - create: { - name : 'Django', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Django' }, + update: {}, + create: { + name: 'Django', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Ruby on Rails' }, - update: {}, - create: { - name : 'Ruby on Rails', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Ruby on Rails' }, + update: {}, + create: { + name: 'Ruby on Rails', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Angular' }, - update: {}, - create: { - name : 'Angular', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Angular' }, + update: {}, + create: { + name: 'Angular', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'React' }, - update: {}, - create: { - name : 'React', - type : TagType.FRAMEWORK - } - }); + where : { name: 'React' }, + update: {}, + create: { + name: 'React', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Flutter' }, - update: {}, - create: { - name : 'Flutter', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Flutter' }, + update: {}, + create: { + name: 'Flutter', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Ionic' }, - update: {}, - create: { - name : 'Ionic', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Ionic' }, + update: {}, + create: { + name: 'Ionic', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Flask' }, - update: {}, - create: { - name : 'Flask', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Flask' }, + update: {}, + create: { + name: 'Flask', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'React Native' }, - update: {}, - create: { - name : 'React Native', - type : TagType.FRAMEWORK - } - }); + where : { name: 'React Native' }, + update: {}, + create: { + name: 'React Native', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Xamarin' }, - update: {}, - create: { - name : 'Xamarin', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Xamarin' }, + update: {}, + create: { + name: 'Xamarin', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Laravel' }, - update: {}, - create: { - name : 'Laravel', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Laravel' }, + update: {}, + create: { + name: 'Laravel', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Spring' }, - update: {}, - create: { - name : 'Spring', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Spring' }, + update: {}, + create: { + name: 'Spring', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Play' }, - update: {}, - create: { - name : 'Play', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Play' }, + update: {}, + create: { + name: 'Play', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Symfony' }, - update: {}, - create: { - name : 'Symfony', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Symfony' }, + update: {}, + create: { + name: 'Symfony', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'ASP.NET' }, - update: {}, - create: { - name : 'ASP.NET', - type : TagType.FRAMEWORK - } - }); + where : { name: 'ASP.NET' }, + update: {}, + create: { + name: 'ASP.NET', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Meteor' }, - update: {}, - create: { - name : 'Meteor', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Meteor' }, + update: {}, + create: { + name: 'Meteor', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Vue.js' }, - update: {}, - create: { - name : 'Vue.js', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Vue.js' }, + update: {}, + create: { + name: 'Vue.js', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Svelte' }, - update: {}, - create: { - name : 'Svelte', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Svelte' }, + update: {}, + create: { + name: 'Svelte', + type: TagType.FRAMEWORK + } + }); await db.tag.upsert({ - where : { name: 'Express.js' }, - update: {}, - create: { - name : 'Express.js', - type : TagType.FRAMEWORK - } - }); + where : { name: 'Express.js' }, + update: {}, + create: { + name: 'Express.js', + type: TagType.FRAMEWORK + } + }); } diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts index 1a536f8..8cb5f41 100644 --- a/ExpressAPI/src/routes/AssignmentRoutes.ts +++ b/ExpressAPI/src/routes/AssignmentRoutes.ts @@ -175,6 +175,7 @@ class AssignmentRoutes implements RoutesManager { gitlabId : repository.id, gitlabLink : repository.web_url, gitlabCreationInfo: repository as unknown as Prisma.JsonObject, + gitlabCreationDate: new Date(), gitlabLastInfo : repository as unknown as Prisma.JsonObject, gitlabLastInfoDate: new Date(), staff : { diff --git a/ExpressAPI/src/routes/ExerciseRoutes.ts b/ExpressAPI/src/routes/ExerciseRoutes.ts index eced4af..ae3d4b9 100644 --- a/ExpressAPI/src/routes/ExerciseRoutes.ts +++ b/ExpressAPI/src/routes/ExerciseRoutes.ts @@ -234,6 +234,7 @@ class ExerciseRoutes implements RoutesManager { gitlabId : repository.id, gitlabLink : repository.web_url, gitlabCreationInfo: repository as unknown as Prisma.JsonObject, + gitlabCreationDate: new Date(), gitlabLastInfo : repository as unknown as Prisma.JsonObject, gitlabLastInfoDate: new Date(), members : { -- GitLab