diff --git a/src/lib/store.ts b/src/lib/store.ts new file mode 100644 index 0000000..96aacb3 --- /dev/null +++ b/src/lib/store.ts @@ -0,0 +1,114 @@ +// Simple in-memory store for demo purposes +// In production, replace with a real database + +export interface Article { + id: string; + type: 'museum' | 'activity'; + title: string; + content: string; + excerpt: string; + imageUrl: string; + date: string; + author: string; + category?: string; + tags?: string[]; +} + +export interface Admin { + username: string; + password: string; // In production, use hashed passwords +} + +const admins: Admin[] = [ + { username: 'admin', password: 'marines2024' }, +]; + +let articles: Article[] = [ + { + id: '1', + type: 'museum', + title: 'Insigne des Troupes de Marine', + content: `L'insigne des Troupes de Marine est un symbole fort de l'identité des soldats qui ont servi dans ces unités d'élite. Cet insigne, représentant une ancre dorée sur fond bleu marine, rappelle les origines maritimes de ces troupes qui ont jadis embarqué sur les navires de la Marine Royale pour défendre les intérêts français outre-mer.\n\nCréé au XVIIe siècle sous le règne de Louis XIV, cet insigne témoigne de siècles de bravoure et de dévouement. Les Troupes de Marine, anciennement connues sous le nom de "Troupes Coloniales", ont participé à de nombreuses campagnes militaires en Afrique, en Asie et en Amérique.\n\nCet exemplaire, conservé précieusement par notre association, date de la Seconde Guerre mondiale et a été porté par un sergent-chef lors de la campagne d'Italie en 1944.`, + excerpt: "Découvrez l'histoire de l'insigne emblématique des Troupes de Marine, symbole de bravoure et d'engagement.", + imageUrl: 'https://images.unsplash.com/photo-1569974498991-d3c12a504f95?w=800&q=80', + date: '2024-01-15', + author: 'Colonel (R) Dupont', + category: 'Insignes & Médailles', + tags: ['insigne', 'histoire', 'traditions'], + }, + { + id: '2', + type: 'museum', + title: 'Télégraphie Coloniale : Les premières liaisons', + content: `La télégraphie coloniale a joué un rôle crucial dans l'administration et la défense des colonies françaises. Dès 1880, les premiers télégraphistes coloniaux s'embarquaient pour installer et maintenir les lignes de communication à travers l'immensité des territoires d'outre-mer.\n\nCet équipement de télégraphie, datant de 1895, a été utilisé au Sénégal pour relier Dakar à Saint-Louis. Il représente l'extraordinaire défi technique que constituait la mise en place d'un réseau de communication dans des conditions tropicales extrêmes.\n\nLes télégraphistes coloniaux, souvent oubliés de l'histoire officielle, ont pourtant contribué de manière décisive à maintenir le lien entre la métropole et ses colonies, permettant ainsi une coordination efficace des opérations militaires et administratives.`, + excerpt: "L'histoire fascinante des télégraphistes coloniaux et leur rôle dans les communications de l'Empire français.", + imageUrl: 'https://images.unsplash.com/photo-1516979187457-637abb4f9353?w=800&q=80', + date: '2024-01-20', + author: 'Commandant (R) Martin', + category: 'Télégraphie', + tags: ['télégraphie', 'colonies', 'communication'], + }, + { + id: '3', + type: 'activity', + title: 'Cérémonie du Souvenir - 8 Mai 2024', + content: `Notre association organise sa cérémonie annuelle du 8 Mai en hommage aux combattants tombés pour la France. Cette année, la cérémonie se déroulera au Monument aux Morts d'Agen, place du Docteur Esquirol.\n\nLe programme de la journée comprend :\n- 10h00 : Rassemblement place du Docteur Esquirol\n- 10h30 : Dépôt de gerbes au Monument aux Morts\n- 11h00 : Discours du Président de l'association et des élus locaux\n- 11h30 : Verre de l'amitié offert par la Ville d'Agen\n- 14h00 : Repas de cohésion au Foyer des Anciens Combattants\n\nTous les membres et leurs familles sont invités à participer. Les uniformes et décorations sont de rigueur pour cette cérémonie officielle.`, + excerpt: "Rejoignez-nous pour la cérémonie commémorative du 8 Mai 2024 à Agen. Programme complet de la journée.", + imageUrl: 'https://images.unsplash.com/photo-1474314881477-04c4aac40a0e?w=800&q=80', + date: '2024-04-30', + author: 'Bureau de l\'association', + category: 'Cérémonies', + tags: ['cérémonie', 'commémoration', '8 mai'], + }, + { + id: '4', + type: 'activity', + title: 'Assemblée Générale Annuelle 2024', + content: `L'Assemblée Générale de notre association se tiendra le samedi 15 juin 2024 à la Maison des Associations d'Agen (salle Gambetta).\n\nOrdre du jour :\n1. Rapport moral du Président\n2. Rapport financier du Trésorier\n3. Élection des membres du bureau\n4. Projets pour l'année 2024-2025\n5. Questions diverses\n\nLa présence de tous les membres est souhaitée. Les membres empêchés sont invités à donner pouvoir à un autre membre. Le formulaire de pouvoir est disponible auprès du secrétaire de l'association.\n\nAprès l'assemblée, un buffet convivial sera organisé pour permettre les échanges entre membres.`, + excerpt: "Assemblée Générale annuelle de l'association le 15 juin 2024. Ordre du jour et informations pratiques.", + imageUrl: 'https://images.unsplash.com/photo-1529156069898-49953e39b3ac?w=800&q=80', + date: '2024-05-20', + author: 'Secrétariat', + category: 'Vie associative', + tags: ['assemblée générale', 'association'], + }, +]; + +export function getArticles(): Article[] { + return [...articles]; +} + +export function getArticlesByType(type: 'museum' | 'activity'): Article[] { + return articles.filter(a => a.type === type); +} + +export function getArticleById(id: string): Article | undefined { + return articles.find(a => a.id === id); +} + +export function createArticle(data: Omit): Article { + const newArticle: Article = { + ...data, + id: Date.now().toString(), + }; + articles = [newArticle, ...articles]; + return newArticle; +} + +export function updateArticle(id: string, data: Partial
): Article | null { + const index = articles.findIndex(a => a.id === id); + if (index === -1) return null; + articles[index] = { ...articles[index], ...data }; + return articles[index]; +} + +export function deleteArticle(id: string): boolean { + const index = articles.findIndex(a => a.id === id); + if (index === -1) return false; + articles = articles.filter(a => a.id !== id); + return true; +} + +export function validateAdmin(username: string, password: string): boolean { + return admins.some(a => a.username === username && a.password === password); +}