mirror of
https://github.com/ArthurDanjou/artapi.git
synced 2026-01-26 01:10:25 +01:00
Add API endpoints for content and update MCP resources to use them
Co-authored-by: ArthurDanjou <29738535+ArthurDanjou@users.noreply.github.com>
This commit is contained in:
7
server/api/contact.get.ts
Normal file
7
server/api/contact.get.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export default defineEventHandler(async (event) => {
|
||||||
|
const result = await queryCollection(event, 'contact')
|
||||||
|
.where('extension', '=', 'json')
|
||||||
|
.first()
|
||||||
|
|
||||||
|
return result.body
|
||||||
|
})
|
||||||
15
server/api/education.get.ts
Normal file
15
server/api/education.get.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
export default defineEventHandler(async (event) => {
|
||||||
|
const result = await queryCollection(event, 'education')
|
||||||
|
.where('extension', '=', 'md')
|
||||||
|
.all()
|
||||||
|
|
||||||
|
return result
|
||||||
|
.sort((a, b) => new Date(b.startDate).getTime() - new Date(a.startDate).getTime())
|
||||||
|
.map(edu => ({
|
||||||
|
degree: edu.degree,
|
||||||
|
institution: edu.institution,
|
||||||
|
startDate: edu.startDate,
|
||||||
|
endDate: edu.endDate,
|
||||||
|
location: edu.location
|
||||||
|
}))
|
||||||
|
})
|
||||||
17
server/api/experiences.get.ts
Normal file
17
server/api/experiences.get.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
export default defineEventHandler(async (event) => {
|
||||||
|
const result = await queryCollection(event, 'experiences')
|
||||||
|
.where('extension', '=', 'md')
|
||||||
|
.all()
|
||||||
|
|
||||||
|
return result
|
||||||
|
.sort((a, b) => new Date(b.startDate).getTime() - new Date(a.startDate).getTime())
|
||||||
|
.map(exp => ({
|
||||||
|
title: exp.title,
|
||||||
|
company: exp.company,
|
||||||
|
companyUrl: exp.companyUrl,
|
||||||
|
startDate: exp.startDate,
|
||||||
|
endDate: exp.endDate,
|
||||||
|
location: exp.location,
|
||||||
|
description: exp.description
|
||||||
|
}))
|
||||||
|
})
|
||||||
7
server/api/hobbies.get.ts
Normal file
7
server/api/hobbies.get.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export default defineEventHandler(async (event) => {
|
||||||
|
const result = await queryCollection(event, 'hobbies')
|
||||||
|
.where('extension', '=', 'md')
|
||||||
|
.first()
|
||||||
|
|
||||||
|
return result.body
|
||||||
|
})
|
||||||
7
server/api/languages.get.ts
Normal file
7
server/api/languages.get.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export default defineEventHandler(async (event) => {
|
||||||
|
const result = await queryCollection(event, 'languages')
|
||||||
|
.where('extension', '=', 'json')
|
||||||
|
.first()
|
||||||
|
|
||||||
|
return result.body
|
||||||
|
})
|
||||||
7
server/api/profile.get.ts
Normal file
7
server/api/profile.get.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export default defineEventHandler(async (event) => {
|
||||||
|
const result = await queryCollection(event, 'profile')
|
||||||
|
.where('extension', '=', 'md')
|
||||||
|
.first()
|
||||||
|
|
||||||
|
return result
|
||||||
|
})
|
||||||
7
server/api/projects.get.ts
Normal file
7
server/api/projects.get.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export default defineEventHandler(async (event) => {
|
||||||
|
const result = await queryCollection(event, 'projects')
|
||||||
|
.where('extension', '=', 'md')
|
||||||
|
.all()
|
||||||
|
|
||||||
|
return result
|
||||||
|
})
|
||||||
7
server/api/skills.get.ts
Normal file
7
server/api/skills.get.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export default defineEventHandler(async (event) => {
|
||||||
|
const result = await queryCollection(event, 'skills')
|
||||||
|
.where('extension', '=', 'json')
|
||||||
|
.first()
|
||||||
|
|
||||||
|
return result.body
|
||||||
|
})
|
||||||
19
server/api/uses.get.ts
Normal file
19
server/api/uses.get.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
export default defineEventHandler(async (event) => {
|
||||||
|
const categories = await queryCollection(event, 'usesCategories')
|
||||||
|
.where('extension', '=', 'md')
|
||||||
|
.all()
|
||||||
|
|
||||||
|
const uses = await queryCollection(event, 'uses')
|
||||||
|
.where('extension', '=', 'md')
|
||||||
|
.all()
|
||||||
|
|
||||||
|
const uses_by_categories = []
|
||||||
|
for (const category of categories) {
|
||||||
|
uses_by_categories.push({
|
||||||
|
category: category,
|
||||||
|
uses: uses.filter((use: { category: unknown }) => use.category === category.slug)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return uses_by_categories
|
||||||
|
})
|
||||||
@@ -4,17 +4,13 @@ export default defineMcpResource({
|
|||||||
uri: 'resource://artmcp/contact',
|
uri: 'resource://artmcp/contact',
|
||||||
cache: '1 hour',
|
cache: '1 hour',
|
||||||
handler: async (uri: URL) => {
|
handler: async (uri: URL) => {
|
||||||
const event = useEvent()
|
const result = await $fetch('/api/contact')
|
||||||
|
|
||||||
const result = await queryCollection(event, 'contact')
|
|
||||||
.where('extension', '=', 'json')
|
|
||||||
.first()
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
contents: [{
|
contents: [{
|
||||||
uri: uri.toString(),
|
uri: uri.toString(),
|
||||||
mimeType: 'text/json',
|
mimeType: 'text/json',
|
||||||
text: JSON.stringify(result.body, null, 2)
|
text: JSON.stringify(result, null, 2)
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,19 +4,7 @@ export default defineMcpResource({
|
|||||||
uri: 'resource://artmcp/education',
|
uri: 'resource://artmcp/education',
|
||||||
cache: '1 hour',
|
cache: '1 hour',
|
||||||
handler: async (uri: URL) => {
|
handler: async (uri: URL) => {
|
||||||
const event = useEvent()
|
const result = await $fetch('/api/education')
|
||||||
|
|
||||||
const result = await queryCollection(event, 'education')
|
|
||||||
.where('extension', '=', 'md')
|
|
||||||
.select([
|
|
||||||
'degree',
|
|
||||||
'institution',
|
|
||||||
'startDate',
|
|
||||||
'endDate',
|
|
||||||
'location'
|
|
||||||
])
|
|
||||||
.orderBy('startDate', 'desc')
|
|
||||||
.all()
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
contents: [{
|
contents: [{
|
||||||
|
|||||||
@@ -4,21 +4,7 @@ export default defineMcpResource({
|
|||||||
uri: 'resource://artmcp/experiences',
|
uri: 'resource://artmcp/experiences',
|
||||||
cache: '1 hour',
|
cache: '1 hour',
|
||||||
handler: async (uri: URL) => {
|
handler: async (uri: URL) => {
|
||||||
const event = useEvent()
|
const result = await $fetch('/api/experiences')
|
||||||
|
|
||||||
const result = await queryCollection(event, 'experiences')
|
|
||||||
.where('extension', '=', 'md')
|
|
||||||
.select([
|
|
||||||
'title',
|
|
||||||
'company',
|
|
||||||
'companyUrl',
|
|
||||||
'startDate',
|
|
||||||
'endDate',
|
|
||||||
'location',
|
|
||||||
'description'
|
|
||||||
])
|
|
||||||
.orderBy('startDate', 'desc')
|
|
||||||
.all()
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
contents: [{
|
contents: [{
|
||||||
|
|||||||
@@ -4,17 +4,13 @@ export default defineMcpResource({
|
|||||||
uri: 'resource://artmcp/hobbies',
|
uri: 'resource://artmcp/hobbies',
|
||||||
cache: '1 hour',
|
cache: '1 hour',
|
||||||
handler: async (uri: URL) => {
|
handler: async (uri: URL) => {
|
||||||
const event = useEvent()
|
const result = await $fetch('/api/hobbies')
|
||||||
|
|
||||||
const result = await queryCollection(event, 'hobbies')
|
|
||||||
.where('extension', '=', 'md')
|
|
||||||
.first()
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
contents: [{
|
contents: [{
|
||||||
uri: uri.toString(),
|
uri: uri.toString(),
|
||||||
mimeType: 'text/json',
|
mimeType: 'text/json',
|
||||||
text: JSON.stringify(result.body, null, 2)
|
text: JSON.stringify(result, null, 2)
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,17 +4,13 @@ export default defineMcpResource({
|
|||||||
uri: 'resource://artmcp/languages',
|
uri: 'resource://artmcp/languages',
|
||||||
cache: '1 hour',
|
cache: '1 hour',
|
||||||
handler: async (uri: URL) => {
|
handler: async (uri: URL) => {
|
||||||
const event = useEvent()
|
const result = await $fetch('/api/languages')
|
||||||
|
|
||||||
const result = await queryCollection(event, 'languages')
|
|
||||||
.where('extension', '=', 'json')
|
|
||||||
.first()
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
contents: [{
|
contents: [{
|
||||||
uri: uri.toString(),
|
uri: uri.toString(),
|
||||||
mimeType: 'text/json',
|
mimeType: 'text/json',
|
||||||
text: JSON.stringify(result.body, null, 2)
|
text: JSON.stringify(result, null, 2)
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,7 @@ export default defineMcpResource({
|
|||||||
uri: 'resource://artmcp/profile',
|
uri: 'resource://artmcp/profile',
|
||||||
cache: '1 hour',
|
cache: '1 hour',
|
||||||
handler: async (uri: URL) => {
|
handler: async (uri: URL) => {
|
||||||
const event = useEvent()
|
const result = await $fetch('/api/profile')
|
||||||
|
|
||||||
const result = await queryCollection(event, 'profile')
|
|
||||||
.where('extension', '=', 'md')
|
|
||||||
.first()
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
contents: [{
|
contents: [{
|
||||||
|
|||||||
@@ -4,11 +4,7 @@ export default defineMcpResource({
|
|||||||
uri: 'resource://artmcp/projects',
|
uri: 'resource://artmcp/projects',
|
||||||
cache: '1 hour',
|
cache: '1 hour',
|
||||||
handler: async (uri: URL) => {
|
handler: async (uri: URL) => {
|
||||||
const event = useEvent()
|
const result = await $fetch('/api/projects')
|
||||||
|
|
||||||
const result = await queryCollection(event, 'projects')
|
|
||||||
.where('extension', '=', 'md')
|
|
||||||
.all()
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
contents: [{
|
contents: [{
|
||||||
|
|||||||
@@ -3,18 +3,14 @@ export default defineMcpResource({
|
|||||||
description: 'A comprehensive list of technical skills, programming languages, frameworks, and tools mastered by Arthur Danjou',
|
description: 'A comprehensive list of technical skills, programming languages, frameworks, and tools mastered by Arthur Danjou',
|
||||||
cache: '1 hour',
|
cache: '1 hour',
|
||||||
uri: 'resource://artmcp/skills',
|
uri: 'resource://artmcp/skills',
|
||||||
handler: async () => {
|
handler: async (uri: URL) => {
|
||||||
const event = useEvent()
|
const result = await $fetch('/api/skills')
|
||||||
|
|
||||||
const result = await queryCollection(event, 'skills')
|
|
||||||
.where('extension', '=', 'json')
|
|
||||||
.first()
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
contents: [{
|
contents: [{
|
||||||
uri: result.path,
|
uri: uri.toString(),
|
||||||
mimeType: 'text/json',
|
mimeType: 'text/json',
|
||||||
text: JSON.stringify(result.body, null, 2)
|
text: JSON.stringify(result, null, 2)
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,27 +4,13 @@ export default defineMcpResource({
|
|||||||
uri: 'resource://artmcp/uses',
|
uri: 'resource://artmcp/uses',
|
||||||
cache: '1 hour',
|
cache: '1 hour',
|
||||||
handler: async (uri: URL) => {
|
handler: async (uri: URL) => {
|
||||||
const event = useEvent()
|
const result = await $fetch('/api/uses')
|
||||||
|
|
||||||
const categories = await queryCollection(event, 'usesCategories').where('extension', '=', 'md').all()
|
|
||||||
|
|
||||||
const uses = await queryCollection(event, 'uses')
|
|
||||||
.where('extension', '=', 'md')
|
|
||||||
.all()
|
|
||||||
|
|
||||||
const uses_by_categories = []
|
|
||||||
for (const category of categories) {
|
|
||||||
uses_by_categories.push({
|
|
||||||
category: category,
|
|
||||||
uses: uses.filter((use: { category: unknown }) => use.category === category.slug)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
contents: [{
|
contents: [{
|
||||||
uri: uri.toString(),
|
uri: uri.toString(),
|
||||||
mimeType: 'text/json',
|
mimeType: 'text/json',
|
||||||
text: JSON.stringify(uses_by_categories, null, 2)
|
text: JSON.stringify(result, null, 2)
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user