Fix login, registration and made the first database version.

This commit is contained in:
2024-11-05 19:51:56 +01:00
parent 83ddaf19d4
commit 1af78e5ab7
35 changed files with 180 additions and 391 deletions

View File

@@ -11,8 +11,8 @@ export default defineCachedEventHandler(async (e) => {
return;
}
const where = ["project = $project"];
const criteria: Record<string, any> = { $project: project };
const where = [];
const criteria: Record<string, any> = { };
if(query && query.path !== undefined)
{

View File

@@ -2,22 +2,16 @@ import useDatabase from '~/composables/useDatabase';
import type { CommentedFile, CommentSearch, File } from '~/types/api';
export default defineCachedEventHandler(async (e) => {
const project = getRouterParam(e, "projectId");
const path = decodeURIComponent(getRouterParam(e, "path") ?? '');
if(!project)
{
setResponseStatus(e, 404);
return;
}
if(!path)
{
setResponseStatus(e, 404);
return;
}
const where = ["project = $project", "path = $path"];
const criteria: Record<string, any> = { $project: project, $path: path };
const where = ["path = $path"];
const criteria: Record<string, any> = { $path: path };
if(where.length > 1)
{
@@ -37,5 +31,5 @@ export default defineCachedEventHandler(async (e) => {
return;
}, {
maxAge: 60*60*24,
getKey: (e) => `file-${getRouterParam(e, "projectId")}-${getRouterParam(e, "path")}`
getKey: (e) => `file-${getRouterParam(e, "path")}`
});

View File

@@ -15,7 +15,7 @@ export default defineEventHandler(async (e) => {
const db = useDatabase();
const content = db.query(`SELECT "path", "title", "type", "order", "private", "navigable", "owner" FROM explorer_files WHERE project = ?1`).all(project!).sort((a: any, b: any) => a.path.length - b.path.length) as NavigatioNExtension[];
const content = db.query(`SELECT "path", "title", "type", "order", "private", "navigable", "owner" FROM explorer_files`).sort((a: any, b: any) => a.path.length - b.path.length) as NavigatioNExtension[];
if(content.length > 0)
{

View File

@@ -1,31 +0,0 @@
import useDatabase from '~/composables/useDatabase';
import { ProjectSearch } from '~/types/api';
export default defineEventHandler(async (e) => {
const query = getQuery(e);
const where = ["f.type != $type"];
const criteria: Record<string, any> = { $type: "Folder" };
if(query && query.owner !== undefined)
{
where.push("owner = $owner");
criteria["$owner"] = query.owner;
}
if(query && query.name !== undefined)
{
where.push("name = $name");
criteria["$name"] = query.name;
}
const db = useDatabase();
const content = db.query(`SELECT p.*, u.username, COUNT(f.path) as pages FROM explorer_projects p LEFT JOIN users u ON p.owner = u.id LEFT JOIN explorer_files f ON f.project = p.id WHERE ${where.join(" AND ")} GROUP BY p.id`).all(criteria) as ProjectSearch[];
if(content.length > 0)
{
return content;
}
setResponseStatus(e, 404);
});

View File

@@ -1,20 +0,0 @@
import useDatabase from '~/composables/useDatabase';
export default defineEventHandler(async (e) => {
const project = getRouterParam(e, "projectId");
const where = ["id = $id"];
const criteria: Record<string, any> = { $id: project };
if (!!project) {
const db = useDatabase();
const content = db.query(`SELECT * FROM explorer_projects WHERE ${where.join(" and ")}`).get(criteria) as Project;
if (content) {
return content;
}
}
setResponseStatus(e, 404);
});

View File

@@ -1,20 +0,0 @@
import useDatabase from '~/composables/useDatabase';
export default defineEventHandler(async (e) => {
const project = getRouterParam(e, "projectId");
const where = ["project = $project"];
const criteria: Record<string, any> = { $project: project };
if (!!project) {
const db = useDatabase();
const content = db.query(`SELECT * FROM explorer_projects WHERE ${where.join(" and ")}`).all(criteria) as Project[];
if (content.length > 0) {
return content;
}
}
setResponseStatus(e, 404);
});

View File

@@ -1,20 +0,0 @@
import useDatabase from '~/composables/useDatabase';
export default defineEventHandler(async (e) => {
const project = getRouterParam(e, "projectId");
const where = ["project = $project"];
const criteria: Record<string, any> = { $project: project };
if (!!project) {
const db = useDatabase();
const content = db.query(`SELECT * FROM explorer_projects WHERE ${where.join(" and ")}`).all(criteria) as Project[];
if (content.length > 0) {
return content;
}
}
setResponseStatus(e, 404);
});

View File

@@ -1,42 +0,0 @@
import useDatabase from '~/composables/useDatabase';
import type { Tag } from '~/types/api';
export default defineCachedEventHandler(async (e) => {
try
{
const project = getRouterParam(e, "projectId");
const tag = decodeURIComponent(getRouterParam(e, "tag") ?? '');
if(!project)
{
setResponseStatus(e, 404);
return;
}
if(!tag)
{
setResponseStatus(e, 404);
return;
}
const where = ["project = $project", "tag = $tag"];
const criteria: Record<string, any> = { $project: project, $tag: tag };
const db = useDatabase();
const content = db.query(`SELECT * FROM explorer_tags WHERE ${where.join(" and ")}`).get(criteria) as Tag;
if(content !== undefined)
{
return content;
}
setResponseStatus(e, 404);
}
catch(err)
{
console.error(err);
setResponseStatus(e, 500);
}
}, {
maxAge: 60*60*24,
getKey: (e) => `tag-${getRouterParam(e, "projectId")}-${getRouterParam(e, "tag")}`
});

View File

@@ -6,7 +6,6 @@ export default defineEventHandler(async (e) => {
if (query.search) {
const db = useDatabase();
const projects = db.query(`SELECT p.*, u.username, COUNT(f.path) as pages FROM explorer_projects p LEFT JOIN users u ON p.owner = u.id LEFT JOIN explorer_files f ON f.project = p.id WHERE name LIKE ?1 AND f.type != "Folder" GROUP BY p.id`).all(query.search) as ProjectSearch[];
const files = db.query(`SELECT f.*, u.username, count(c.path) as comments FROM explorer_files f LEFT JOIN users u ON f.owner = u.id LEFT JOIN explorer_comments c ON c.project = f.project AND c.path = f.path WHERE title LIKE ?1 AND private = 0 AND type != "Folder" GROUP BY f.project, f.path`).all(query.search) as FileSearch[];
const users = db.query(`SELECT id, username FROM users WHERE username LIKE ?1`).all(query.search) as UserSearch[];

View File

@@ -1,4 +1,6 @@
import { eq, sql } from "drizzle-orm";
import useDatabase from "~/composables/useDatabase";
import { usersTable } from "~/db/schema";
import type { User } from "~/types/auth";
export default defineEventHandler((e) => {
@@ -12,5 +14,18 @@ export default defineEventHandler((e) => {
const db = useDatabase();
return db.query(`SELECT id, username, email, state, d.* FROM users u LEFT JOIN users_data d ON u.id = d.user_id WHERE u.id = ?1`).get(id) as User;
const user = db.query.usersTable.findFirst({
columns: {
username: true,
},
with: {
data: true
},
where: eq(usersTable.id, sql.placeholder('id')),
}).prepare().get({ id });
return {
username: user?.username,
...user?.data
} as User
});

View File

@@ -1,16 +0,0 @@
import useDatabase from "~/composables/useDatabase";
import type { ProjectSearch } from "~/types/api";
export default defineEventHandler((e) => {
const id = getRouterParam(e, 'id');
if(!id)
{
setResponseStatus(e, 400);
return;
}
const db = useDatabase();
return db.query(`SELECT p.*, count(f.path) as pages FROM explorer_projects p LEFT JOIN explorer_files f ON p.id = f.project WHERE p.owner = ?1`).all(id) as Omit<ProjectSearch, 'username'>[];
});