UNPKG

@defikitdotnet/x-ai-combat

Version:

XCombatAI - Social Media Engagement Template for the Agent Framework

136 lines 5.45 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; import { Controller, Get, ResourceController } from "@defikitdotnet/agent-framework-backend"; import { v4 as uuidv4 } from "uuid"; import { PostResource } from "../models/Post"; import { XAIAdapter } from "../db/XAIAdapter"; // Create a resource implementation for PostResource const createPostResource = (adapter) => ({ name: "posts", findAll: async (agentId) => { // Get all posts from database via adapter, filtered by agentId if provided const posts = await adapter.getAllPosts(agentId); // Convert to PostResource objects return posts.map(post => { const postResource = new PostResource(); Object.assign(postResource, post); return postResource; }); }, findById: async (id, agentId) => { const post = await adapter.findPostById(id); if (!post) return null; // Filter by agentId if provided if (agentId && post.agentId !== agentId) { return null; } // Convert from Post to PostResource const postResource = new PostResource(); Object.assign(postResource, post); return postResource; }, findByTweetId: async (tweetId, agentId) => { const post = await adapter.findPostByTweetId(tweetId); if (!post) return null; // Filter by agentId if provided if (agentId && post.agentId !== agentId) { return null; } // Convert from Post to PostResource const postResource = new PostResource(); Object.assign(postResource, post); return postResource; }, create: async (data) => { const id = data.id || uuidv4(); const newPost = new PostResource(); Object.assign(newPost, data, { id, createdAt: data.createdAt || new Date(), }); await adapter.createPost(newPost); return newPost; }, update: async (id, data) => { const existingPost = await adapter.findPostById(id); if (!existingPost) return null; const updated = new PostResource(); Object.assign(updated, existingPost, data, { updatedAt: new Date() }); await adapter.createPost(updated); return updated; }, delete: async (id) => { // Implementation will be added later if needed return false; }, }); /** * Post API controller */ let XAICombatPostController = class XAICombatPostController extends ResourceController { constructor(adapter) { super(createPostResource(adapter)); this.adapter = adapter; } async getMyPosts(req, res) { try { // Get userId from token const userId = req.XaicombatUser?.userId; if (!userId) { res.status(401).json({ error: "Unauthorized: User not authenticated" }); return; } // Parse pagination parameters const page = req.query.page ? parseInt(req.query.page) : 1; const limit = req.query.limit ? parseInt(req.query.limit) : 10; // Get agentId from JWT token const agentId = req.XaicombatUser?.agentId; // Validate pagination parameters if (isNaN(page) || page < 1 || isNaN(limit) || limit < 1) { res.status(400).json({ error: "Invalid pagination parameters" }); return; } const { posts, total } = await this.adapter.getPostsByUserId(userId, page, limit, agentId); const resources = posts.map(post => { const resource = new PostResource(); Object.assign(resource, post); return resource; }); res.status(200).json({ data: resources, pagination: { page, limit, total, totalPages: Math.ceil(total / limit) } }); } catch (error) { console.error("Error retrieving posts for current user:", error); res.status(500).json({ error: "Failed to retrieve posts" }); } } }; __decorate([ Get("/my-posts"), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", Promise) ], XAICombatPostController.prototype, "getMyPosts", null); XAICombatPostController = __decorate([ Controller("/xaicombat/api/posts"), __metadata("design:paramtypes", [XAIAdapter]) ], XAICombatPostController); export { XAICombatPostController }; //# sourceMappingURL=PostController.js.map