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';
|
2018-11-07 09:33:19 -08:00
|
|
|
import {
|
|
|
|
formatTeamMemberForPost,
|
|
|
|
formatTeamMemberFromGet,
|
|
|
|
generateProposalUrl,
|
|
|
|
} from 'utils/api';
|
2018-09-10 09:55:26 -07:00
|
|
|
|
|
|
|
export function getProposals(): Promise<{ data: Proposal[] }> {
|
2018-09-27 13:39:37 -07:00
|
|
|
return axios.get('/api/v1/proposals/').then(res => {
|
|
|
|
res.data = res.data.map((proposal: any) => {
|
|
|
|
proposal.team = proposal.team.map(formatTeamMemberFromGet);
|
2018-11-07 09:33:19 -08:00
|
|
|
proposal.proposalUrlId = generateProposalUrl(proposal.proposalId, proposal.title);
|
2018-09-27 13:39:37 -07:00
|
|
|
return proposal;
|
|
|
|
});
|
|
|
|
return res;
|
|
|
|
});
|
2018-09-10 09:55:26 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
export function getProposal(proposalId: number | string): Promise<{ data: Proposal }> {
|
2018-09-27 13:39:37 -07:00
|
|
|
return axios.get(`/api/v1/proposals/${proposalId}`).then(res => {
|
|
|
|
res.data.team = res.data.team.map(formatTeamMemberFromGet);
|
2018-11-07 09:33:19 -08:00
|
|
|
res.data.proposalUrlId = generateProposalUrl(res.data.proposalId, res.data.title);
|
2018-09-27 13:39:37 -07:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2018-11-14 08:43:00 -08:00
|
|
|
export function postProposal(payload: ProposalDraft) {
|
2018-09-25 13:09:25 -07:00
|
|
|
return axios.post(`/api/v1/proposals/`, {
|
|
|
|
...payload,
|
2018-09-27 13:25:49 -07:00
|
|
|
// Team has a different shape for POST
|
2018-09-27 13:39:37 -07:00
|
|
|
team: payload.team.map(formatTeamMemberForPost),
|
2018-09-25 13:09:25 -07:00
|
|
|
});
|
2018-09-10 09:55:26 -07:00
|
|
|
}
|
2018-10-01 16:22:56 -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;
|
2018-11-07 11:08:42 -08:00
|
|
|
signedMessage: string;
|
|
|
|
rawTypedData: string;
|
2018-10-01 16:22:56 -07:00
|
|
|
}): Promise<{ data: TeamMember }> {
|
2018-11-07 11:08:42 -08:00
|
|
|
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 => {
|
2018-10-01 16:22:56 -07:00
|
|
|
res.data = formatTeamMemberFromGet(res.data);
|
|
|
|
return res;
|
|
|
|
});
|
|
|
|
}
|
2018-10-30 07:40:21 -07:00
|
|
|
|
|
|
|
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;
|
|
|
|
});
|
|
|
|
}
|
2018-11-02 09:07:06 -07:00
|
|
|
|
|
|
|
export function verifyEmail(code: string): Promise<any> {
|
|
|
|
return axios.post(`/api/v1/email/${code}/verify`);
|
2018-11-02 09:24:28 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
export function postProposalUpdate(
|
2018-11-07 09:33:19 -08:00
|
|
|
proposalId: number,
|
2018-11-02 09:24:28 -07:00
|
|
|
title: string,
|
|
|
|
content: string,
|
|
|
|
): Promise<{ data: Update }> {
|
2018-11-07 09:33:19 -08:00
|
|
|
return axios.post(`/api/v1/proposals/${proposalId}/updates`, {
|
|
|
|
title,
|
|
|
|
content,
|
|
|
|
});
|
|
|
|
}
|
2018-11-13 08:07:09 -08:00
|
|
|
|
|
|
|
export function getProposalDrafts(): Promise<{ data: ProposalDraft[] }> {
|
2018-11-14 13:18:40 -08:00
|
|
|
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-14 08:43:00 -08:00
|
|
|
|
|
|
|
export function putProposal(proposal: ProposalDraft): Promise<{ data: ProposalDraft }> {
|
|
|
|
// Exclude some keys
|
2018-11-14 13:18:40 -08:00
|
|
|
const { proposalId, stage, dateCreated, team, ...rest } = proposal;
|
2018-11-14 08:43:00 -08:00
|
|
|
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,
|
|
|
|
});
|
|
|
|
}
|