zcash-grant-system/frontend/client/api/api.ts

132 lines
3.8 KiB
TypeScript
Raw Normal View History

2018-09-10 09:55:26 -07:00
import axios from './axios';
2018-11-13 08:07:09 -08:00
import { Proposal, ProposalDraft, TeamMember, Update } from 'types';
import {
formatTeamMemberForPost,
formatTeamMemberFromGet,
generateProposalUrl,
} from 'utils/api';
2018-09-10 09:55:26 -07:00
export function getProposals(): Promise<{ data: Proposal[] }> {
return axios.get('/api/v1/proposals/').then(res => {
res.data = res.data.map((proposal: any) => {
proposal.team = proposal.team.map(formatTeamMemberFromGet);
proposal.proposalUrlId = generateProposalUrl(proposal.proposalId, proposal.title);
return proposal;
});
return res;
});
2018-09-10 09:55:26 -07:00
}
export function getProposal(proposalId: number | string): Promise<{ data: Proposal }> {
return axios.get(`/api/v1/proposals/${proposalId}`).then(res => {
res.data.team = res.data.team.map(formatTeamMemberFromGet);
res.data.proposalUrlId = generateProposalUrl(res.data.proposalId, res.data.title);
return res;
});
2018-09-10 09:55:26 -07:00
}
export function getProposalComments(proposalId: number | string) {
2018-09-18 15:20:17 -07:00
return axios.get(`/api/v1/proposals/${proposalId}/comments`);
2018-09-10 09:55:26 -07:00
}
export function getProposalUpdates(proposalId: number | string) {
2018-09-18 15:20:17 -07:00
return axios.get(`/api/v1/proposals/${proposalId}/updates`);
2018-09-10 09:55:26 -07:00
}
export function postProposal(payload: ProposalDraft) {
return axios.post(`/api/v1/proposals/`, {
...payload,
// Team has a different shape for POST
team: payload.team.map(formatTeamMemberForPost),
});
2018-09-10 09:55:26 -07:00
}
export function getUser(address: string): Promise<{ data: TeamMember }> {
return axios.get(`/api/v1/users/${address}`).then(res => {
res.data = formatTeamMemberFromGet(res.data);
return res;
});
}
export function createUser(payload: {
accountAddress: string;
emailAddress: string;
displayName: string;
title: string;
signedMessage: string;
rawTypedData: string;
}): Promise<{ data: TeamMember }> {
return axios.post('/api/v1/users', payload).then(res => {
res.data = formatTeamMemberFromGet(res.data);
return res;
});
}
export function authUser(payload: {
accountAddress: string;
signedMessage: string;
rawTypedData: string;
}): Promise<{ data: TeamMember }> {
return axios.post('/api/v1/users/auth', payload).then(res => {
res.data = formatTeamMemberFromGet(res.data);
return res;
});
}
export function updateUser(user: TeamMember): Promise<{ data: TeamMember }> {
return axios
.put(`/api/v1/users/${user.ethAddress}`, formatTeamMemberForPost(user))
.then(res => {
res.data = formatTeamMemberFromGet(res.data);
return res;
});
}
export function verifyEmail(code: string): Promise<any> {
return axios.post(`/api/v1/email/${code}/verify`);
}
export function postProposalUpdate(
proposalId: number,
title: string,
content: string,
): Promise<{ data: Update }> {
return axios.post(`/api/v1/proposals/${proposalId}/updates`, {
title,
content,
});
}
2018-11-13 08:07:09 -08:00
export function getProposalDrafts(): Promise<{ data: ProposalDraft[] }> {
return axios.get('/api/v1/proposals/drafts').then(res => {
res.data = res.data.map((draft: any) => ({
...draft,
team: draft.team.map(formatTeamMemberFromGet),
}));
return res;
});
2018-11-13 08:07:09 -08:00
}
export function postProposalDraft(): Promise<{ data: ProposalDraft }> {
return axios.post('/api/v1/proposals/drafts');
}
2018-11-15 08:02:16 -08:00
export function deleteProposalDraft(proposalId: number): Promise<any> {
return axios.delete(`/api/v1/proposals/${proposalId}`);
}
export function putProposal(proposal: ProposalDraft): Promise<{ data: ProposalDraft }> {
// Exclude some keys
const { proposalId, stage, dateCreated, team, ...rest } = proposal;
return axios.put(`/api/v1/proposals/${proposal.proposalId}`, rest);
}
2018-11-14 14:03:50 -08:00
export function putProposalPublish(
proposal: ProposalDraft,
contractAddress: string,
): Promise<{ data: ProposalDraft }> {
return axios.put(`/api/v1/proposals/${proposal.proposalId}/publish`, {
contractAddress,
});
}