feat: add HostedImage relation in Category table + data migration to HostedImage

This commit is contained in:
Dolu
2022-09-06 11:28:08 +02:00
parent 5e688466c0
commit 72e7eb2a25
5 changed files with 48 additions and 12 deletions

View File

@@ -122,7 +122,6 @@ export interface NexusGenObjects {
workplan: string; // String! workplan: string; // String!
} }
Category: { // root type Category: { // root type
cover_image?: string | null; // String
icon?: string | null; // String icon?: string | null; // String
id: number; // Int! id: number; // Int!
title: string; // String! title: string; // String!

View File

@@ -4,7 +4,8 @@ const {
extendType, extendType,
nonNull, nonNull,
} = require('nexus'); } = require('nexus');
const { prisma } = require('../../../prisma') const { prisma } = require('../../../prisma');
const resolveImgObjectToUrl = require('../../../utils/resolveImageUrl');
const Category = objectType({ const Category = objectType({
@@ -12,7 +13,17 @@ const Category = objectType({
definition(t) { definition(t) {
t.nonNull.int('id'); t.nonNull.int('id');
t.nonNull.string('title'); t.nonNull.string('title');
t.string('cover_image'); t.string('cover_image', {
async resolve(parent) {
const imgObject = await prisma.hostedImage.findUnique({
where: {
id: parent.cover_image_id
}
});
return resolveImgObjectToUrl(imgObject);
}
});
t.string('icon'); t.string('icon');

View File

@@ -0,0 +1,5 @@
-- AlterTable
ALTER TABLE "Category" ADD COLUMN "cover_image_id" INTEGER;
-- AddForeignKey
ALTER TABLE "Category" ADD CONSTRAINT "Category_cover_image_id_fkey" FOREIGN KEY ("cover_image_id") REFERENCES "HostedImage"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@@ -112,10 +112,12 @@ model Skill {
// ----------------- // -----------------
model Category { model Category {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
title String title String
cover_image String? cover_image String?
icon String? cover_image_id Int?
cover_image_rel HostedImage? @relation("CategoryCoverImage", fields: [cover_image_id], references: [id])
icon String?
project Project[] project Project[]
} }
@@ -285,8 +287,9 @@ model HostedImage {
createdAt DateTime @default(now()) createdAt DateTime @default(now())
is_used Boolean @default(false) is_used Boolean @default(false)
ProjectThumbnail Project[] @relation("ProjectThumbnail") ProjectThumbnail Project[] @relation("ProjectThumbnail")
ProjectCoverImage Project[] @relation("ProjectCoverImage") ProjectCoverImage Project[] @relation("ProjectCoverImage")
CategoryCoverImage Category[] @relation("CategoryCoverImage")
} }
// ----------------- // -----------------

View File

@@ -92,7 +92,7 @@ async function migrateOldImages() {
let hostedImageId = await _insertInHostedImage(screenshot) let hostedImageId = await _insertInHostedImage(screenshot)
projectScreenshotIds.push(hostedImageId); projectScreenshotIds.push(hostedImageId);
} }
if(projectScreenshotIds.length > 0) { if (projectScreenshotIds.length > 0) {
await _updateObjectWithHostedImageId(prisma.project, project.id, { await _updateObjectWithHostedImageId(prisma.project, project.id, {
screenshots_ids: projectScreenshotIds, screenshots_ids: projectScreenshotIds,
}) })
@@ -101,7 +101,7 @@ async function migrateOldImages() {
/** /**
* Project.cover_image to Project.cover_image_id * Project.cover_image to Project.cover_image_id
**/ **/
if(project.cover_image) { if (project.cover_image) {
let hostedImageId = await _insertInHostedImage(project.cover_image) let hostedImageId = await _insertInHostedImage(project.cover_image)
await _updateObjectWithHostedImageId(prisma.project, project.id, { await _updateObjectWithHostedImageId(prisma.project, project.id, {
cover_image_id: hostedImageId, cover_image_id: hostedImageId,
@@ -111,13 +111,31 @@ async function migrateOldImages() {
/** /**
* Project.thumbnail_image to Project.thumbnail_image_id * Project.thumbnail_image to Project.thumbnail_image_id
**/ **/
if(project.cover_image) { if (project.cover_image) {
let hostedImageId = await _insertInHostedImage(project.thumbnail_image) let hostedImageId = await _insertInHostedImage(project.thumbnail_image)
await _updateObjectWithHostedImageId(prisma.project, project.id, { await _updateObjectWithHostedImageId(prisma.project, project.id, {
thumbnail_image_id: hostedImageId, thumbnail_image_id: hostedImageId,
}) })
} }
} }
/**
* Category
**/
const categories = await prisma.category.findMany({
select: {
id: true,
cover_image: true,
}
})
for (const category of categories) {
if (category.cover_image) {
let hostedImageId = await _insertInHostedImage(category.cover_image)
await _updateObjectWithHostedImageId(prisma.category, category.id, {
cover_image_id: hostedImageId,
})
}
}
} }
async function _insertInHostedImage(url){ async function _insertInHostedImage(url){