This repository has been archived on 2026-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
2024-08-24 07:37:34 +02:00

100 lines
2.2 KiB
TypeScript

/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2023 Spacebar and Spacebar Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api";
import {
Team,
TeamCreateSchema,
TeamMember,
TeamMemberRole,
TeamMemberState,
User,
} from "@spacebar/util";
import { HTTPError } from "lambert-server";
const router: Router = Router();
router.get(
"/",
route({
query: {
include_payout_account_status: {
type: "boolean",
description:
"Whether to include team payout account status in the response (default false)",
},
},
responses: {
200: {
body: "TeamListResponse",
},
},
}),
async (req: Request, res: Response) => {
const teams = await Team.find({
where: {
owner_user_id: req.user_id,
},
relations: ["members"],
});
res.send(teams);
},
);
router.post(
"/",
route({
requestBody: "TeamCreateSchema",
responses: {
200: {
body: "Team",
},
},
}),
async (req: Request, res: Response) => {
const user = await User.findOneOrFail({
where: [{ id: req.user_id }],
select: ["mfa_enabled"],
});
if (!user.mfa_enabled)
throw new HTTPError("You must enable MFA to create a team");
const body = req.body as TeamCreateSchema;
const team = Team.create({
name: body.name,
owner_user_id: req.user_id,
});
await team.save();
await TeamMember.create({
user_id: req.user_id,
team_id: team.id,
membership_state: TeamMemberState.ACCEPTED,
permissions: ["*"],
role: TeamMemberRole.ADMIN,
}).save();
res.json(team);
},
);
export default router;