This commit is contained in:
2025-11-14 15:30:44 +08:00
parent adcb7920bd
commit cf3cb916b7
42 changed files with 939 additions and 655 deletions

View File

@@ -1,23 +0,0 @@
"use server";
import { createTextPair } from "./controllers/TextPairController";
async function createTextPairAction(formData: FormData) {
'use server';
const textPair = {
text1: formData.get('text1') as string,
text2: formData.get('text2') as string,
locale1: formData.get('locale1') as string,
locale2: formData.get('locale2') as string,
folderId: parseInt(formData.get('folderId') as string)
}
if(textPair.text1 && textPair.text2 && textPair.locale1 && textPair.locale2 && textPair.folderId){
await createTextPair(
textPair.locale1,
textPair.locale2,
textPair.text1,
textPair.text2,
textPair.folderId
);
}
}

View File

@@ -1,61 +0,0 @@
"use server";
import { pool } from "../db";
export async function deleteFolderById(id: number) {
try {
await pool.query("DELETE FROM folders WHERE id = $1", [id]);
} catch (e) {
console.log(e);
}
}
export async function getFoldersByOwner(owner: string) {
try {
const folders = await pool.query("SELECT * FROM folders WHERE owner = $1", [
owner,
]);
return folders.rows;
} catch (e) {
console.log(e);
}
}
export async function getOwnerByFolderId(id: number) {
try {
const owner = await pool.query("SELECT owner FROM folders WHERE id = $1", [
id,
]);
return owner.rows[0].owner;
} catch (e) {
console.log(e);
}
}
export async function getFoldersWithTextPairsCountByOwner(owner: string) {
try {
const folders = await pool.query(
`select f.id, f.name, f.owner, count(tp.id) as text_pairs_count from folders f
left join text_pairs tp on tp.folder_id = f.id
where f.owner = $1
group by f.id, f.name, f.owner`,
[owner],
);
return folders.rows;
} catch (e) {
console.log(e);
}
}
export async function createFolder(name: string, owner: string) {
try {
return (
await pool.query("INSERT INTO folders (name, owner) VALUES ($1, $2)", [
name.trim(),
owner,
])
).rows[0];
} catch (e) {
console.log(e);
}
}

View File

@@ -1,69 +0,0 @@
"use server";
import { pool } from "../db";
export async function createTextPair(
locale1: string,
locale2: string,
text1: string,
text2: string,
folderId: number,
) {
try {
await pool.query(
"INSERT INTO text_pairs (locale1, locale2, text1, text2, folder_id) VALUES ($1, $2, $3, $4, $5)",
[locale1.trim(), locale2.trim(), text1.trim(), text2.trim(), folderId],
);
} catch (e) {
console.log(e);
}
}
export async function deleteTextPairById(id: number) {
try {
await pool.query("DELETE FROM text_pairs WHERE id = $1", [id]);
} catch (e) {
console.log(e);
}
}
export async function updateWordPairById(
id: number,
locale1: string,
locale2: string,
text1: string,
text2: string,
) {
try {
await pool.query(
"UPDATE text_pairs SET locale1 = $1, locale2 = $2, text1 = $3, text2 = $4 WHERE id = $5",
[locale1.trim(), locale2.trim(), text1.trim(), text2.trim(), id],
);
} catch (e) {
console.log(e);
}
}
export async function getTextPairsByFolderId(folderId: number) {
try {
const textPairs = await pool.query(
"SELECT * FROM text_pairs WHERE folder_id = $1",
[folderId],
);
return textPairs.rows;
} catch (e) {
console.log(e);
}
}
export async function getTextPairsCountByFolderId(folderId: number) {
try {
const count = await pool.query(
"SELECT COUNT(*) FROM text_pairs WHERE folder_id = $1",
[folderId],
);
return count.rows[0].count;
} catch (e) {
console.log(e);
}
}

View File

@@ -1,24 +1,4 @@
import { Pool } from "pg";
import z from "zod";
import { PrismaClient } from "../../generated/prisma/client";
export const pool = new Pool({
user: "postgres",
host: "localhost",
max: 20,
idleTimeoutMillis: 3000,
connectionTimeoutMillis: 2000,
maxLifetimeSeconds: 60,
});
export const TextPairSchema = z.object({
id: z.number().int().positive(),
text1: z.string().min(1).max(100),
text2: z.string().min(1).max(100),
locale1: z.string().min(2).max(10),
locale2: z.string().min(2).max(10),
owner: z.string().min(1).max(40),
createdAt: z.date().default(() => new Date()),
updatedAt: z.date().default(() => new Date()),
});
export const
const prisma = new PrismaClient();
export default prisma;

View File

@@ -1,17 +1,19 @@
import { TranslationHistoryArraySchema, TranslationHistorySchema } from "@/interfaces";
import { getLocalStorageOperator } from "@/utils";
import {
TranslationHistoryArraySchema,
TranslationHistorySchema,
} from "@/lib/interfaces";
import { getLocalStorageOperator } from "@/lib/utils";
import z from "zod";
const MAX_HISTORY_LENGTH = 50;
export const tlso = getLocalStorageOperator<typeof TranslationHistoryArraySchema>(
"translator",
TranslationHistoryArraySchema,
);
export const tlso = getLocalStorageOperator<
typeof TranslationHistoryArraySchema
>("translator", TranslationHistoryArraySchema);
export const tlsoPush = (item: z.infer<typeof TranslationHistorySchema>) => {
tlso.set(
[...tlso.get(), item as z.infer<typeof TranslationHistorySchema>].slice(
-MAX_HISTORY_LENGTH,
),
);
};
};

View File

@@ -0,0 +1,45 @@
"use server";
import { folderCreateInput, folderUpdateInput } from "../../../generated/prisma/models";
import prisma from "../db";
export async function getFoldersByOwner(owner: string) {
const folders = await prisma.folder.findMany({
where: {
owner: owner,
},
});
return folders;
}
export async function createFolder(folder: folderCreateInput) {
await prisma.folder.create({
data: folder,
});
}
export async function deleteFolderById(id: number) {
await prisma.folder.delete({
where: {
id: id,
},
});
}
export async function updateFolderById(id: number, data: folderUpdateInput) {
await prisma.folder.update({
where: {
id: id,
},
data: data,
});
}
export async function getOwnerByFolderId(id: number) {
const folder = await prisma.folder.findUnique({
where: {
id: id,
},
});
return folder?.owner;
}

View File

@@ -0,0 +1,51 @@
"use server";
import {
text_pairCreateInput,
text_pairUpdateInput,
} from "../../../generated/prisma/models";
import prisma from "../db";
export async function createTextPair(data: text_pairCreateInput) {
await prisma.text_pair.create({
data: data,
});
}
export async function deleteTextPairById(id: number) {
await prisma.text_pair.delete({
where: {
id: id,
},
});
}
export async function updateTextPairById(
id: number,
data: text_pairUpdateInput,
) {
await prisma.text_pair.update({
where: {
id: id,
},
data: data,
});
}
export async function getTextPairCountByFolderId(folderId: number) {
const count = await prisma.text_pair.count({
where: {
folder_id: folderId,
},
});
return count;
}
export async function getTextPairsByFolderId(folderId: number) {
const textPairs = await prisma.text_pair.findMany({
where: {
folder_id: folderId,
},
});
return textPairs;
}