chore: restructure project into backend and frontend folders

- Move all frontend code to frontend/ directory
- Add backend/ with Go project structure (cmd, internal, pkg)
- Add docker-compose.yml for orchestration
This commit is contained in:
Egor Pozharov
2026-04-14 13:14:28 +06:00
parent 11e12f964d
commit 4e0899d3ce
54 changed files with 779 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
import { create } from 'zustand';
import { persist } from 'zustand/middleware';
import type { Delivery } from '../types';
interface DeliveryState {
deliveries: Delivery[];
addDelivery: (delivery: Omit<Delivery, 'id' | 'createdAt' | 'updatedAt'>) => void;
updateDelivery: (id: string, updates: Partial<Delivery>) => void;
deleteDelivery: (id: string) => void;
toggleStatus: (id: string) => void;
getDeliveriesByDate: (date: string) => Delivery[];
getDeliveriesByDateRange: (startDate: string, endDate: string) => Delivery[];
getDeliveryCountsByDate: () => Record<string, number>;
}
const STORAGE_KEY = 'delivery-tracker-data';
export const useDeliveryStore = create<DeliveryState>()(
persist(
(set, get) => ({
deliveries: [],
addDelivery: (delivery) => {
const now = Date.now();
const newDelivery: Delivery = {
...delivery,
id: crypto.randomUUID(),
createdAt: now,
updatedAt: now,
};
set((state) => ({
deliveries: [...state.deliveries, newDelivery],
}));
},
updateDelivery: (id, updates) => {
set((state) => ({
deliveries: state.deliveries.map((d) =>
d.id === id ? { ...d, ...updates, updatedAt: Date.now() } : d
),
}));
},
deleteDelivery: (id) => {
set((state) => ({
deliveries: state.deliveries.filter((d) => d.id !== id),
}));
},
toggleStatus: (id) => {
set((state) => ({
deliveries: state.deliveries.map((d) =>
d.id === id
? { ...d, status: d.status === 'new' ? 'delivered' : 'new', updatedAt: Date.now() }
: d
),
}));
},
getDeliveriesByDate: (date) => {
return get().deliveries.filter((d) => d.date === date);
},
getDeliveriesByDateRange: (startDate, endDate) => {
return get().deliveries.filter((d) => {
const date = d.date;
return date >= startDate && date <= endDate;
});
},
getDeliveryCountsByDate: () => {
const counts: Record<string, number> = {};
get().deliveries.forEach((d) => {
counts[d.date] = (counts[d.date] || 0) + 1;
});
return counts;
},
}),
{
name: STORAGE_KEY,
}
)
);