76 lines
2.2 KiB
TypeScript
76 lines
2.2 KiB
TypeScript
import axios from './axios';
|
|
import { Proposal, TeamMember } from 'types';
|
|
import { formatTeamMemberForPost, formatTeamMemberFromGet } from 'utils/api';
|
|
import { PROPOSAL_CATEGORY } from './constants';
|
|
|
|
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);
|
|
return proposal;
|
|
});
|
|
return res;
|
|
});
|
|
}
|
|
|
|
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);
|
|
return res;
|
|
});
|
|
}
|
|
|
|
export function getProposalComments(proposalId: number | string) {
|
|
return axios.get(`/api/v1/proposals/${proposalId}/comments`);
|
|
}
|
|
|
|
export function getProposalUpdates(proposalId: number | string) {
|
|
return axios.get(`/api/v1/proposals/${proposalId}/updates`);
|
|
}
|
|
|
|
export function postProposal(payload: {
|
|
// TODO type Milestone
|
|
accountAddress: string;
|
|
crowdFundContractAddress: string;
|
|
content: string;
|
|
title: string;
|
|
category: PROPOSAL_CATEGORY;
|
|
milestones: object[];
|
|
team: TeamMember[];
|
|
}) {
|
|
return axios.post(`/api/v1/proposals/`, {
|
|
...payload,
|
|
// Team has a different shape for POST
|
|
team: payload.team.map(formatTeamMemberForPost),
|
|
});
|
|
}
|
|
|
|
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;
|
|
token: string;
|
|
}): Promise<{ data: TeamMember }> {
|
|
return axios.post(`/api/v1/users/`, 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;
|
|
});
|
|
}
|