mirror of
https://github.com/Litlyx/litlyx
synced 2025-12-10 07:48:37 +01:00
refactoring
This commit is contained in:
@@ -13,23 +13,28 @@ export default defineEventHandler(async event => {
|
||||
|
||||
const body = await readBody(event);
|
||||
|
||||
if (body.name.length == 0) return setResponseStatus(event, 400, 'name is required');
|
||||
|
||||
if (body.name.length < 3) return setResponseStatus(event, 400, 'name too short');
|
||||
if (body.name.length > 32) return setResponseStatus(event, 400, 'name too long');
|
||||
|
||||
const data = await getRequestDataOld(event, { allowGuests: false, allowLitlyx: false, });
|
||||
const data = await getRequestData(event, [], ['OWNER']);
|
||||
if (!data) return;
|
||||
|
||||
if (!body.name) return setResponseStatus(event, 400, 'body is required');
|
||||
if (body.name.trim().length == 0) return setResponseStatus(event, 400, 'name is required');
|
||||
if (body.name.trim().length < 3) return setResponseStatus(event, 400, 'name too short');
|
||||
if (body.name.trim().length > 32) return setResponseStatus(event, 400, 'name too long');
|
||||
|
||||
const { project_id } = data;
|
||||
|
||||
|
||||
|
||||
const sameName = await ApiSettingsModel.exists({ project_id, apiName: body.name.trim() });
|
||||
if (sameName) return setResponseStatus(event, 400, 'An api key with the same name exists');
|
||||
|
||||
|
||||
const key = generateApiKey();
|
||||
|
||||
const keyNumbers = await ApiSettingsModel.countDocuments({ project_id });
|
||||
|
||||
if (keyNumbers >= 5) return setResponseStatus(event, 400, 'Api key limit reached');
|
||||
|
||||
const newApiSettings = await ApiSettingsModel.create({ project_id, apiKey: key, apiName: body.name, created_at: Date.now(), usage: 0 });
|
||||
const newApiSettings = await ApiSettingsModel.create({ project_id, apiKey: key, apiName: body.name.trim(), created_at: Date.now(), usage: 0 });
|
||||
|
||||
return newApiSettings.toJSON();
|
||||
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
|
||||
const data = await getRequestDataOld(event, { requireSchema: false, allowGuests: false, allowLitlyx: false });
|
||||
const data = await getRequestData(event, [], ['OWNER']);
|
||||
if (!data) return;
|
||||
|
||||
const { project } = data;
|
||||
|
||||
const { name } = await readBody(event);
|
||||
|
||||
if (name.length == 0) return setResponseStatus(event, 400, 'name is required');
|
||||
if (name.trim()) return setResponseStatus(event, 400, 'name is required');
|
||||
if (name.trim().length < 2) return setResponseStatus(event, 400, 'name too short');
|
||||
if (name.trim().length > 32) return setResponseStatus(event, 400, 'name too long');
|
||||
|
||||
project.name = name;
|
||||
project.name = name.trim();
|
||||
await project.save();
|
||||
|
||||
return { ok: true };
|
||||
|
||||
@@ -8,7 +8,7 @@ export default defineEventHandler(async event => {
|
||||
|
||||
const body = await readBody(event);
|
||||
|
||||
const newProjectName = body.name;
|
||||
const newProjectName = body.name.trim();
|
||||
|
||||
if (!newProjectName) return setResponseStatus(event, 400, 'ProjectName too short');
|
||||
if (newProjectName.length < 2) return setResponseStatus(event, 400, 'ProjectName too short');
|
||||
|
||||
@@ -7,9 +7,7 @@ export default defineEventHandler(async event => {
|
||||
if (!userData?.logged) return [];
|
||||
|
||||
|
||||
const members = await TeamMemberModel.find({
|
||||
user_id: userData.id
|
||||
});
|
||||
const members = await TeamMemberModel.find({ user_id: userData.id, pending: false });
|
||||
|
||||
const projects: TProject[] = [];
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ export default defineEventHandler(async event => {
|
||||
const { project_id } = body;
|
||||
if (!project_id) return setResponseStatus(event, 400, 'project_id is required');
|
||||
|
||||
console.log({ project_id, user_id: data.user.id });
|
||||
|
||||
const member = await TeamMemberModel.findOne({ project_id, user_id: data.user.id });
|
||||
if (!member) return setResponseStatus(event, 400, 'member not found');
|
||||
|
||||
|
||||
@@ -9,12 +9,16 @@ export default defineEventHandler(async event => {
|
||||
const data = await getRequestData(event, [], ['OWNER']);
|
||||
if (!data) return;
|
||||
|
||||
const { project_id, project } = data;
|
||||
const { project_id, project, user } = data;
|
||||
|
||||
const { email } = await readBody(event);
|
||||
|
||||
const targetUser = await UserModel.findOne({ email });
|
||||
|
||||
if (targetUser && targetUser._id.toString() === project.owner.toString()) {
|
||||
return setResponseStatus(event, 400, 'You cannot invite yourself');
|
||||
}
|
||||
|
||||
|
||||
const link = `http://127.0.0.1:3000/accept_invite?project_id=${project_id.toString()}`;
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import { TeamMemberModel } from "@schema/TeamMemberSchema";
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
|
||||
const data = await getRequestData(event, []);
|
||||
const data = await getRequestData(event, [], []);
|
||||
if (!data) return;
|
||||
|
||||
const { project_id, user } = data;
|
||||
|
||||
@@ -14,7 +14,7 @@ export type MemberWithPermissions = {
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
|
||||
const data = await getRequestData(event);
|
||||
const data = await getRequestData(event, [], ['OWNER']);
|
||||
if (!data) return;
|
||||
|
||||
const { project_id, project, user } = data;
|
||||
|
||||
@@ -11,7 +11,7 @@ export default defineEventHandler(async event => {
|
||||
const { name: newSnapshotName, from, to, color: snapshotColor } = body;
|
||||
|
||||
if (!newSnapshotName) return setResponseStatus(event, 400, 'SnapshotName too short');
|
||||
if (newSnapshotName.length == 0) return setResponseStatus(event, 400, 'SnapshotName too short');
|
||||
if (newSnapshotName.trim().length == 0) return setResponseStatus(event, 400, 'SnapshotName too short');
|
||||
|
||||
if (!from) return setResponseStatus(event, 400, 'from is required');
|
||||
if (!to) return setResponseStatus(event, 400, 'to is required');
|
||||
@@ -26,7 +26,7 @@ export default defineEventHandler(async event => {
|
||||
|
||||
|
||||
const newSnapshot = await ProjectSnapshotModel.create({
|
||||
name: newSnapshotName,
|
||||
name: newSnapshotName.trim(),
|
||||
from: new Date(from),
|
||||
to: new Date(to),
|
||||
color: snapshotColor,
|
||||
|
||||
@@ -12,17 +12,18 @@ export default defineEventHandler(async event => {
|
||||
const cacheKey = `timeline:visits:${pid}:${slice}:${from}:${to}:${domain}`;
|
||||
const cacheExp = 20;
|
||||
|
||||
return await Redis.useCacheV2(cacheKey, cacheExp, async () => {
|
||||
const timelineData = await executeAdvancedTimelineAggregation({
|
||||
projectId: project_id,
|
||||
model: VisitModel,
|
||||
from, to, slice, timeOffset, domain
|
||||
});
|
||||
|
||||
return timelineData;
|
||||
|
||||
// return await Redis.useCacheV2(cacheKey, cacheExp, async () => {
|
||||
const timelineData = await executeAdvancedTimelineAggregation({
|
||||
projectId: project_id,
|
||||
model: VisitModel,
|
||||
from, to, slice, timeOffset, domain,
|
||||
debug: true
|
||||
});
|
||||
|
||||
return timelineData;
|
||||
|
||||
// });
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -80,10 +80,11 @@ export async function executeAdvancedTimelineAggregation<T = {}>(options: Advanc
|
||||
range: {
|
||||
step: 1,
|
||||
unit: granularity,
|
||||
bounds: [
|
||||
new Date(new Date(options.from).getTime() - (timeOffset * 1000 * 60)),
|
||||
new Date(new Date(options.to).getTime() - (timeOffset * 1000 * 60) + 1),
|
||||
]
|
||||
bounds: 'full'
|
||||
// [
|
||||
// new Date(new Date(options.from).getTime() - (timeOffset * 1000 * 60)),
|
||||
// new Date(new Date(options.to).getTime() - (timeOffset * 1000 * 60) + 1),
|
||||
// ]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user