...
This commit is contained in:
@@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
45
src/lib/services/folderService.ts
Normal file
45
src/lib/services/folderService.ts
Normal 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;
|
||||
}
|
||||
51
src/lib/services/textPairService.ts
Normal file
51
src/lib/services/textPairService.ts
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user