Optimisation DB et Migration

This commit is contained in:
2026-05-26 01:11:11 +02:00
parent 2c35fe53b9
commit 664044bcd6
5 changed files with 37 additions and 8 deletions
+18
View File
@@ -1,18 +1,36 @@
{ {
"version": 1, "version": 1,
"skills": { "skills": {
"frontend-design": {
"source": "anthropics/skills",
"sourceType": "github",
"skillPath": "skills/frontend-design/SKILL.md",
"computedHash": "063a0e6448123cd359ad0044cc46b0e490cc7964d45ef4bb9fd842bd2ffbca67"
},
"grill-me": { "grill-me": {
"source": "mattpocock/skills", "source": "mattpocock/skills",
"sourceType": "github", "sourceType": "github",
"skillPath": "skills/productivity/grill-me/SKILL.md", "skillPath": "skills/productivity/grill-me/SKILL.md",
"computedHash": "784f0dbb7403b0f00324bce9a112f715342777a0daee7bbb7385f9c6f0a170ea" "computedHash": "784f0dbb7403b0f00324bce9a112f715342777a0daee7bbb7385f9c6f0a170ea"
}, },
"improve-codebase-architecture": {
"source": "mattpocock/skills",
"sourceType": "github",
"skillPath": "skills/engineering/improve-codebase-architecture/SKILL.md",
"computedHash": "ef32aea0a8fab9b365ff9e08a95f8d353e20ca21ea46ec2e73587c86dd341351"
},
"pptx": { "pptx": {
"source": "anthropics/skills", "source": "anthropics/skills",
"sourceType": "github", "sourceType": "github",
"skillPath": "skills/pptx/SKILL.md", "skillPath": "skills/pptx/SKILL.md",
"computedHash": "6b8b859d26f93aa059c9870d1ab76b44ab69e3d6757ce4a03cc94cb760888073" "computedHash": "6b8b859d26f93aa059c9870d1ab76b44ab69e3d6757ce4a03cc94cb760888073"
}, },
"shadcn": {
"source": "shadcn/ui",
"sourceType": "github",
"skillPath": "skills/shadcn/SKILL.md",
"computedHash": "80a6226e78f6d1fe464214ae0ef449d49d8ffaa3e7704f011e9b418c678ad4d1"
},
"supabase": { "supabase": {
"source": "supabase/agent-skills", "source": "supabase/agent-skills",
"sourceType": "github", "sourceType": "github",
+7 -3
View File
@@ -1,5 +1,6 @@
import { useEffect, useState, useCallback, useRef } from 'react' import { useEffect, useState, useCallback, useRef } from 'react'
import { supabase } from '@/lib/supabase' import { supabase } from '@/lib/supabase'
import { toast } from 'sonner'
export function useSkillLevels() { export function useSkillLevels() {
const [levels, setLevels] = useState({}) const [levels, setLevels] = useState({})
@@ -40,19 +41,22 @@ export function useSkillLevels() {
const oldLevel = existing?.level const oldLevel = existing?.level
if (existing) { if (existing) {
await supabase.from('skill_levels').update({ level: newLevel }).eq('id', existing.id) const { error } = await supabase.from('skill_levels').update({ level: newLevel }).eq('id', existing.id)
if (error) { toast.error(error.message); return }
} else { } else {
await supabase.from('skill_levels').insert({ member_id: memberId, skill_id: skillId, level: newLevel }) const { error } = await supabase.from('skill_levels').insert({ member_id: memberId, skill_id: skillId, level: newLevel })
if (error) { toast.error(error.message); return }
} }
if (oldLevel !== newLevel && changedBy) { if (oldLevel !== newLevel && changedBy) {
await supabase.from('skill_history').insert({ const { error } = await supabase.from('skill_history').insert({
member_id: memberId, member_id: memberId,
skill_id: skillId, skill_id: skillId,
old_level: oldLevel || null, old_level: oldLevel || null,
new_level: newLevel, new_level: newLevel,
changed_by: changedBy, changed_by: changedBy,
}) })
if (error) { toast.error(error.message); return }
} }
await fetch() await fetch()
+2
View File
@@ -58,6 +58,8 @@ export function AcceptInvite() {
} }
await supabase.from('invitations').update({ accepted: true }).eq('token', token) await supabase.from('invitations').update({ accepted: true }).eq('token', token)
.then()
.catch(() => {})
toast.success('Compte créé ! Vous pouvez vous connecter.') toast.success('Compte créé ! Vous pouvez vous connecter.')
navigate('/login') navigate('/login')
+4 -2
View File
@@ -25,7 +25,8 @@ export function Members() {
} }
async function updateMember() { async function updateMember() {
await supabase.from('members').update({ full_name: editName }).eq('id', editMember.id) const { error } = await supabase.from('members').update({ full_name: editName }).eq('id', editMember.id)
if (error) { toast.error(error.message); return }
setEditMember(null) setEditMember(null)
load() load()
toast.success('Membre mis à jour') toast.success('Membre mis à jour')
@@ -33,7 +34,8 @@ export function Members() {
async function deleteMember(id) { async function deleteMember(id) {
if (!confirm('Supprimer ce membre ?')) return if (!confirm('Supprimer ce membre ?')) return
await supabase.from('members').delete().eq('id', id) const { error } = await supabase.from('members').delete().eq('id', id)
if (error) { toast.error(error.message); return }
load() load()
toast.success('Membre supprimé') toast.success('Membre supprimé')
} }
+6 -3
View File
@@ -22,9 +22,11 @@ export function Skills() {
async function saveCategory() { async function saveCategory() {
if (editCat) { if (editCat) {
await supabase.from('categories').update({ name: newCatName, color: newCatColor }).eq('id', editCat) const { error } = await supabase.from('categories').update({ name: newCatName, color: newCatColor }).eq('id', editCat)
if (error) { toast.error(error.message); return }
} else { } else {
await supabase.from('categories').insert({ name: newCatName, color: newCatColor }) const { error } = await supabase.from('categories').insert({ name: newCatName, color: newCatColor })
if (error) { toast.error(error.message); return }
} }
setCatDialogOpen(false) setCatDialogOpen(false)
setEditCat(null) setEditCat(null)
@@ -40,7 +42,8 @@ export function Skills() {
} }
async function saveSkill() { async function saveSkill() {
await supabase.from('skills').insert({ name: newSkill.name, category_id: newSkill.category_id }) const { error } = await supabase.from('skills').insert({ name: newSkill.name, category_id: newSkill.category_id })
if (error) { toast.error(error.message); return }
setSkillDialogOpen(false) setSkillDialogOpen(false)
setNewSkill({ name: '', category_id: '' }) setNewSkill({ name: '', category_id: '' })
refetchSkills() refetchSkills()