feat: ajouter la gestion des contacts et des hobbies avec des ressources associées

This commit is contained in:
2025-11-14 18:13:14 +01:00
parent 025820a85d
commit d36ba22c9a
14 changed files with 321 additions and 23 deletions

View File

@@ -0,0 +1,4 @@
export default defineEventHandler(async (event) => {
const { discord } = useRuntimeConfig(event)
return await $fetch(`https://api.lanyard.rest/v1/users/${discord.userId}`)
})

10
server/api/contact.get.ts Normal file
View File

@@ -0,0 +1,10 @@
import { queryCollection } from '@nuxt/content/server'
export default defineCachedEventHandler(async (event) => {
return await queryCollection(event, 'contact')
.where('extension', '=', 'json')
.first()
}, {
name: 'contact-list',
maxAge: 3600 // 1 hour
})

View File

@@ -1,11 +1,9 @@
import { queryCollection } from '@nuxt/content/server'
export default defineCachedEventHandler(async (event) => {
return {
body: await queryCollection(event, 'education')
.where('extension', '=', 'md')
.all()
}
return await queryCollection(event, 'education')
.where('extension', '=', 'md')
.all()
}, {
name: 'educations-list',
maxAge: 3600 // 1 hour

View File

@@ -1,11 +1,9 @@
import { queryCollection } from '@nuxt/content/server'
export default defineCachedEventHandler(async (event) => {
return {
body: await queryCollection(event, 'experiences')
.where('extension', '=', 'md')
.all()
}
return await queryCollection(event, 'experiences')
.where('extension', '=', 'md')
.all()
}, {
name: 'experiences-list',
maxAge: 3600 // 1 hour

View File

@@ -0,0 +1,8 @@
import { queryCollection } from '@nuxt/content/server'
export default defineCachedEventHandler(async (event) => {
return await queryCollection(event, 'hobbies').first()
}, {
name: 'hobbies-list',
maxAge: 3600 // 1 hour
})

View File

@@ -1,11 +1,9 @@
import { queryCollection } from '@nuxt/content/server'
export default defineCachedEventHandler(async (event) => {
return {
body: await queryCollection(event, 'projects')
.where('extension', '=', 'md')
.all()
}
return await queryCollection(event, 'projects')
.where('extension', '=', 'md')
.all()
}, {
name: 'projects-list',
maxAge: 3600 // 1 hour

View File

@@ -1,11 +1,9 @@
import { queryCollection } from '@nuxt/content/server'
export default defineCachedEventHandler(async (event) => {
return {
body: await queryCollection(event, 'skills')
.where('extension', '=', 'json')
.all()
}
return await queryCollection(event, 'skills')
.where('extension', '=', 'json')
.first()
}, {
name: 'skills-list',
maxAge: 3600 // 1 hour

View File

@@ -15,9 +15,7 @@ export default defineCachedEventHandler(async (event) => {
})
}
return {
body: uses_by_categories
}
return uses_by_categories
}, {
name: 'uses-list',
maxAge: 3600 // 1 hour

View File

@@ -0,0 +1,57 @@
import type { H3Event } from 'h3'
const cachedWakatimeCoding = defineCachedFunction(async (event: H3Event) => {
const config = useRuntimeConfig(event)
return await $fetch(`https://wakatime.com/share/${config.wakatime.userId}/${config.wakatime.coding}.json`)
}, {
maxAge: 24 * 60 * 60,
name: 'wakatime',
getKey: () => 'coding'
})
const cachedWakatimeEditors = defineCachedFunction(async (event: H3Event) => {
const config = useRuntimeConfig(event)
return await $fetch(`https://wakatime.com/share/${config.wakatime.userId}/${config.wakatime.editors}.json`)
}, {
maxAge: 24 * 60 * 60,
name: 'wakatime',
getKey: () => 'editors'
})
const cachedWakatimeOs = defineCachedFunction(async (event: H3Event) => {
const config = useRuntimeConfig(event)
return await $fetch(`https://wakatime.com/share/${config.wakatime.userId}/${config.wakatime.os}.json`)
}, {
maxAge: 24 * 60 * 60,
name: 'wakatime',
getKey: () => 'os'
})
const cachedWakatimeLanguages = defineCachedFunction(async (event: H3Event) => {
const config = useRuntimeConfig(event)
return await $fetch(`https://wakatime.com/share/${config.wakatime.userId}/${config.wakatime.languages}.json`)
}, {
maxAge: 24 * 60 * 60,
name: 'wakatime',
getKey: () => 'languages'
})
export default defineEventHandler(async (event) => {
const [coding, editors, os, languages] = await Promise.all([
cachedWakatimeCoding(event),
cachedWakatimeEditors(event),
cachedWakatimeOs(event),
cachedWakatimeLanguages(event)
])
return {
coding,
editors,
os,
languages
}
})

View File

@@ -104,6 +104,82 @@ function createServer() {
}
)
server.registerResource(
'artmcp-activity',
'resource://artmcp/activity',
{
title: 'ArtMCP Activity',
description: 'Get realtime activity of Arthur Danjou'
},
async (uri) => {
const result = await $fetch('/api/activity')
return {
contents: [{
uri: uri.href,
mimeType: 'application/json',
text: JSON.stringify(result, null, 2)
}]
}
}
)
server.registerResource(
'artmcp-wakatime',
'resource://artmcp/wakatime',
{
title: 'ArtMCP Wakatime',
description: 'Get Wakatime statistics of Arthur Danjou'
},
async (uri) => {
const result = await $fetch('/api/wakatime')
return {
contents: [{
uri: uri.href,
mimeType: 'application/json',
text: JSON.stringify(result, null, 2)
}]
}
}
)
server.registerResource(
'artmcp-contact',
'resource://artmcp/contact',
{
title: 'ArtMCP Contact',
description: 'Get Contact Information of Arthur Danjou'
},
async (uri) => {
const result = await $fetch('/api/contact')
return {
contents: [{
uri: uri.href,
mimeType: 'application/json',
text: JSON.stringify(result, null, 2)
}]
}
}
)
server.registerResource(
'artmcp-contact',
'resource://artmcp/hobbies',
{
title: 'ArtMCP Hobbies',
description: 'Get Hobbies Information of Arthur Danjou'
},
async (uri) => {
const result = await $fetch('/api/hobbies')
return {
contents: [{
uri: uri.href,
mimeType: 'application/json',
text: JSON.stringify(result, null, 2)
}]
}
}
)
// Tools
server.registerTool(
'get_resume_link',
@@ -148,6 +224,82 @@ function createServer() {
}
)
server.registerPrompt(
'artmcp-activity',
{
title: 'Get Realtime Activity of Arthur Danjou',
description: 'Get Realtime Activity of Arthur Danjou'
},
async () => {
return {
messages: [{
role: 'user',
content: {
type: 'text',
text: `Provide me the realtime activity of Arthur Danjou.`
}
}]
}
}
)
server.registerPrompt(
'artmcp-wakatime',
{
title: 'Get Stats of Arthur Danjou',
description: 'Get Stats of Arthur Danjou powered by Wakatime'
},
async () => {
return {
messages: [{
role: 'user',
content: {
type: 'text',
text: `Provide me the stats of Arthur Danjou powered by Wakatime.`
}
}]
}
}
)
server.registerPrompt(
'artmcp-contact',
{
title: 'Get Contact Information of Arthur Danjou',
description: 'Get Contact Information of Arthur Danjou'
},
async () => {
return {
messages: [{
role: 'user',
content: {
type: 'text',
text: `How can I contact Arthur Danjou?`
}
}]
}
}
)
server.registerPrompt(
'artmcp-hobbies',
{
title: 'Get Hobbies Information of Arthur Danjou',
description: 'Get Hobbies Information of Arthur Danjou'
},
async () => {
return {
messages: [{
role: 'user',
content: {
type: 'text',
text: `What are the hobbies, interests and passions of Arthur Danjou?`
}
}]
}
}
)
return server
}