You've already forked obsidian-visualiser
Campaign character insertion and deletion. Updating the inventory rendering. Update of the character_config IDs.
This commit is contained in:
43
server/api/character/[id]/campaign/[cid].delete.ts
Normal file
43
server/api/character/[id]/campaign/[cid].delete.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import { and, eq, or } from 'drizzle-orm';
|
||||
import useDatabase from '~/composables/useDatabase';
|
||||
import { campaignCharactersTable, campaignMembersTable, campaignTable, characterTable } from '~/db/schema';
|
||||
|
||||
export default defineEventHandler(async (e) => {
|
||||
const _id = getRouterParam(e, "id");
|
||||
if(!_id)
|
||||
{
|
||||
setResponseStatus(e, 400);
|
||||
return;
|
||||
}
|
||||
const id = parseInt(_id, 10);
|
||||
|
||||
const _campaign_id = getRouterParam(e, "cid");
|
||||
if(!_campaign_id)
|
||||
{
|
||||
setResponseStatus(e, 400);
|
||||
return;
|
||||
}
|
||||
const campaign_id = parseInt(_campaign_id, 10);
|
||||
|
||||
const session = await getUserSession(e);
|
||||
if(!session.user || session.user.state !== 1)
|
||||
{
|
||||
setResponseStatus(e, 401);
|
||||
return;
|
||||
}
|
||||
|
||||
const db = useDatabase();
|
||||
|
||||
const campaign = db.select({ id: campaignTable.id }).from(campaignMembersTable).innerJoin(campaignTable, eq(campaignMembersTable.id, campaignTable.id)).where(and(eq(campaignMembersTable.id, campaign_id), or(eq(campaignMembersTable.user, session.user.id), eq(campaignTable.owner, session.user.id)))).get();
|
||||
if(!campaign || campaign.id !== campaign_id)
|
||||
return setResponseStatus(e, 404);
|
||||
|
||||
const character = db.select({ id: campaignCharactersTable.character }).from(campaignCharactersTable).where(and(eq(campaignCharactersTable.id, campaign_id), eq(campaignCharactersTable.character, id))).get();
|
||||
if(!character || character.id !== id)
|
||||
return setResponseStatus(e, 403);
|
||||
|
||||
db.delete(campaignCharactersTable).where(and(eq(campaignCharactersTable.id, campaign_id), eq(campaignCharactersTable.character, id))).run();
|
||||
|
||||
setResponseStatus(e, 200);
|
||||
return;
|
||||
});
|
||||
45
server/api/character/[id]/campaign/[cid].post.ts
Normal file
45
server/api/character/[id]/campaign/[cid].post.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import { and, eq, notExists } from 'drizzle-orm';
|
||||
import useDatabase from '~/composables/useDatabase';
|
||||
import { campaignCharactersTable, campaignMembersTable, campaignTable, characterTable } from '~/db/schema';
|
||||
import { CharacterVariablesValidation } from '#shared/character.util';
|
||||
|
||||
export default defineEventHandler(async (e) => {
|
||||
const _id = getRouterParam(e, "id");
|
||||
if(!_id)
|
||||
{
|
||||
setResponseStatus(e, 400);
|
||||
return;
|
||||
}
|
||||
const id = parseInt(_id, 10);
|
||||
|
||||
const _campaign_id = getRouterParam(e, "cid");
|
||||
if(!_campaign_id)
|
||||
{
|
||||
setResponseStatus(e, 400);
|
||||
return;
|
||||
}
|
||||
const campaign_id = parseInt(_campaign_id, 10);
|
||||
|
||||
const session = await getUserSession(e);
|
||||
if(!session.user || session.user.state !== 1)
|
||||
{
|
||||
setResponseStatus(e, 401);
|
||||
return;
|
||||
}
|
||||
|
||||
const db = useDatabase();
|
||||
const character = db.select({ id: characterTable.id }).from(characterTable).where(and(eq(characterTable.id, id), eq(characterTable.owner, session.user.id))).get();
|
||||
if(!character || character.id !== id)
|
||||
return setResponseStatus(e, 403);
|
||||
|
||||
const campaign = db.select({ id: campaignMembersTable.id }).from(campaignMembersTable).where(and(eq(campaignMembersTable.id, campaign_id), eq(campaignMembersTable.user, session.user.id))).get();
|
||||
if(!campaign || campaign.id !== campaign_id)
|
||||
return setResponseStatus(e, 404);
|
||||
|
||||
db.insert(campaignCharactersTable).values({
|
||||
id: campaign_id,
|
||||
character: id,
|
||||
}).onConflictDoNothing().run();
|
||||
|
||||
return setResponseStatus(e, 200);
|
||||
});
|
||||
Reference in New Issue
Block a user