release v2.0.0 #4

Merged
crimsen merged 481 commits from develop into master 2024-01-18 15:15:08 +00:00
4 changed files with 42 additions and 5 deletions
Showing only changes of commit 17e640892a - Show all commits

View File

@ -27,10 +27,11 @@ declare namespace FG {
id: number; id: number;
time: Date; time: Date;
amount: number; amount: number;
reversal?: this; reversal_id: number;
sender_id?: string; sender_id?: string;
receiver_id?: string; receiver_id?: string;
author_id?: string; author_id?: string;
original_id?: number;
} }
interface Event { interface Event {
id: number; id: number;

View File

@ -77,7 +77,9 @@ export default defineComponent({
} }
}; };
const isReversed = computed(() => props.transaction.reversal != undefined); const isReversed = computed(
() => props.transaction.reversal_id != undefined || props.transaction.original_id != undefined
);
const canReverse = computed( const canReverse = computed(
() => () =>

View File

@ -31,6 +31,10 @@ const state: BalanceInterface = {
loading: 0 loading: 0
}; };
function fixTransaction(t: FG.Transaction) {
t.time = new Date(t.time);
}
const mutations: MutationTree<BalanceInterface> = { const mutations: MutationTree<BalanceInterface> = {
setBalance(state, data: { userid: string; balance: BalanceResponse }) { setBalance(state, data: { userid: string; balance: BalanceResponse }) {
state.balances.set( state.balances.set(
@ -59,6 +63,10 @@ const mutations: MutationTree<BalanceInterface> = {
addTransaction(state, data: FG.Transaction) { addTransaction(state, data: FG.Transaction) {
state.transactions.push(data); state.transactions.push(data);
}, },
addTransactions(state, data: [FG.Transaction]) {
state.transactions.push(...data);
state.transactions.sort((a, b) => (a.time <= b.time ? -1 : 1));
},
reverseTransaction(state, data: { transaction: FG.Transaction; reversal: FG.Transaction }) { reverseTransaction(state, data: { transaction: FG.Transaction; reversal: FG.Transaction }) {
const idx = state.transactions.findIndex(value => value.id === data.transaction.id); const idx = state.transactions.findIndex(value => value.id === data.transaction.id);
data.transaction.reversal = data.reversal; data.transaction.reversal = data.reversal;
@ -109,6 +117,25 @@ const actions: ActionTree<BalanceInterface, StateInterface> = {
}) })
.finally(() => commit('setLoading', false)); .finally(() => commit('setLoading', false));
}, },
getTransactions(
{ commit, rootState },
payload: {
userid?: string;
filter?: { limit?: number; offset?: number; from?: Date; to?: Date };
}
) {
commit('setLoading');
if (!payload.userid) payload.userid = (<FG.User>rootState.user.currentUser).userid;
if (!payload.filter) payload.filter = { limit: 10 };
return axios
.get(`/users/${payload.userid}/balance/transactions`, { params: payload.filter || {} })
.then(({ data }: AxiosResponse<[FG.Transaction]>) => {
data.forEach(t => fixTransaction(t));
commit('addTransactions', data);
return data;
})
.finally(() => commit('setLoading', false));
},
getLimit({ rootState, commit }) { getLimit({ rootState, commit }) {
commit('setLoading'); commit('setLoading');
axios axios
@ -125,8 +152,9 @@ const actions: ActionTree<BalanceInterface, StateInterface> = {
revert({ dispatch, commit }, transaction: FG.Transaction) { revert({ dispatch, commit }, transaction: FG.Transaction) {
return axios return axios
.delete(`/balance/${transaction.id}`) .delete(`/balance/${transaction.id}`)
.then((response: AxiosResponse<FG.Transaction>) => { .then(({ data }: AxiosResponse<FG.Transaction>) => {
commit('reverseTransaction', { transaction: transaction, reversal: response.data }); fixTransaction(data);
commit('reverseTransaction', { transaction: transaction, reversal: data });
dispatch('getBalance').catch(err => console.warn(err)); dispatch('getBalance').catch(err => console.warn(err));
}); });
}, },
@ -136,7 +164,7 @@ const actions: ActionTree<BalanceInterface, StateInterface> = {
.put(`/users/${data.user}/balance`, data) .put(`/users/${data.user}/balance`, data)
.then((response: AxiosResponse<FG.Transaction>) => { .then((response: AxiosResponse<FG.Transaction>) => {
const transaction = response.data; const transaction = response.data;
transaction.time = new Date(transaction.time); fixTransaction(transaction);
commit('addTransaction', transaction); commit('addTransaction', transaction);
commit(state.balances.has(data.user) ? 'changeBalance' : 'setBalance', { commit(state.balances.has(data.user) ? 'changeBalance' : 'setBalance', {
userid: data.user, userid: data.user,
@ -152,6 +180,7 @@ const actions: ActionTree<BalanceInterface, StateInterface> = {
.catch(err => { .catch(err => {
console.debug(err); console.debug(err);
// Maybe Balance changed // Maybe Balance changed
void dispatch('getTransactions', {});
return dispatch('getBalance', data.sender ? data.sender : data.user); return dispatch('getBalance', data.sender ? data.sender : data.user);
}) })
.finally(() => commit('setLoading', false)); .finally(() => commit('setLoading', false));

View File

@ -9,3 +9,8 @@ export function hasPermissions(needed: string[], store: Store<StateInterface>) {
const permissions = store.state.user.currentPermissions; const permissions = store.state.user.currentPermissions;
return needed.every(value => permissions.includes(value)); return needed.every(value => permissions.includes(value));
} }
export function hasSomePermissions(needed: string[], store: Store<StateInterface>) {
const permissions = store.state.user.currentPermissions;
return needed.some(value => permissions.includes(value));
}