120 lines
3.7 KiB
Markdown
120 lines
3.7 KiB
Markdown
# Placebo.mk - Basic Structure Complete
|
|
|
|
## ✅ What's Been Built
|
|
|
|
### Backend (NestJS)
|
|
- [x] NestJS project initialized with TypeScript
|
|
- [x] TypeORM configured with SQLite database
|
|
- [x] Entities created: Article, Author, Category
|
|
- [x] Articles module with full CRUD operations
|
|
- [x] DTOs with validation (CreateArticleDto, UpdateArticleDto, FindArticlesDto)
|
|
- [x] Service layer with business logic
|
|
- [x] REST API endpoints
|
|
- [x] CORS configured for frontend and Strapi
|
|
- [x] Strapi integration service with webhook support
|
|
- [x] HTTP client for fetching Strapi content
|
|
- [x] Content sync from Strapi to local database
|
|
- [x] Environment variables setup
|
|
- [x] Type checking configured
|
|
- [x] Linting configured
|
|
|
|
### Frontend (TanStack)
|
|
- [x] Vite + React + TypeScript project initialized
|
|
- [x] TanStack Router configured
|
|
- [x] TanStack Query configured
|
|
- [x] Basic routes created: home, articles list, article detail
|
|
- [x] API client with TypeScript interfaces
|
|
- [x] Custom hooks for data fetching
|
|
- [x] Environment variables setup
|
|
- [x] Type checking configured
|
|
- [x] Linting configured
|
|
|
|
### CMS (Strapi)
|
|
- [x] Strapi installed in cms/cms/ directory
|
|
- [x] Project initialized with TypeScript
|
|
|
|
### Project Structure
|
|
- [x] Monorepo structure with backend, frontend, cms directories
|
|
- [x] .gitignore for all projects
|
|
- [x] AGENTS.md with comprehensive guidelines
|
|
- [x] STRUCTURE.md with project overview
|
|
- [x] STRAPI_INTEGRATION.md with setup instructions
|
|
- [x] Environment variable templates (.env.example)
|
|
|
|
## 🚀 Ready to Use
|
|
|
|
### Backend
|
|
```bash
|
|
cd backend
|
|
npm install
|
|
cp .env.example .env
|
|
# Edit .env to add STRAPI_API_TOKEN
|
|
npm run start:dev
|
|
# API available at http://localhost:3000/api/v1
|
|
```
|
|
|
|
### Frontend
|
|
```bash
|
|
cd frontend
|
|
npm install
|
|
cp .env.example .env
|
|
npm run dev
|
|
# App available at http://localhost:5173
|
|
```
|
|
|
|
### Strapi CMS
|
|
```bash
|
|
cd cms/cms
|
|
npm run develop
|
|
# Admin panel available at http://localhost:1337/admin
|
|
```
|
|
|
|
## 📦 Strapi Integration
|
|
|
|
The backend now includes:
|
|
- **StrapiService**: Fetches and syncs content from Strapi
|
|
- **StrapiController**: Handles webhooks from Strapi
|
|
- **Manual sync endpoint**: POST `/api/v1/webhooks/strapi/sync/all`
|
|
- **Webhook endpoint**: POST `/api/v1/webhooks/strapi/article`
|
|
|
|
### Setup Steps:
|
|
1. Create content types in Strapi: Article, Author, Category, Tag (see STRAPI_INTEGRATION.md)
|
|
2. Create API token in Strapi admin panel
|
|
3. Add token to backend `.env` as `STRAPI_API_TOKEN`
|
|
4. Configure webhook in Strapi to point to backend
|
|
5. Start all three services
|
|
|
|
## 🔜 Next Steps
|
|
|
|
1. **Configure Strapi content types** following STRAPI_INTEGRATION.md
|
|
2. **Create webhook** in Strapi for automatic sync
|
|
3. **Implement frontend UI components** for displaying articles
|
|
4. **Add authentication** for the CMS
|
|
5. **Set up image handling** with Strapi media library
|
|
6. **Implement search** and filtering in the frontend
|
|
7. **Add analytics** for article views
|
|
8. **Set up deployment** for all three services
|
|
|
|
## 📝 API Endpoints Available
|
|
|
|
### Articles
|
|
- `GET /api/v1/articles` - List articles with pagination and filters
|
|
- `GET /api/v1/articles/:id` - Get article by ID
|
|
- `GET /api/v1/articles/slug/:slug` - Get article by slug
|
|
- `POST /api/v1/articles` - Create article (for Strapi sync)
|
|
- `PUT /api/v1/articles/:id` - Update article
|
|
- `DELETE /api/v1/articles/:id` - Delete article
|
|
|
|
### Webhooks & Sync
|
|
- `POST /api/v1/webhooks/strapi/article` - Handle Strapi webhooks
|
|
- `POST /api/v1/webhooks/strapi/sync/all` - Trigger full sync
|
|
|
|
All article endpoints support query parameters:
|
|
- `category` - Filter by category slug
|
|
- `author` - Filter by author slug
|
|
- `tag` - Filter by tag
|
|
- `status` - Filter by status (draft/published/archived)
|
|
- `search` - Full-text search in title and content
|
|
- `page` - Page number (default: 1)
|
|
- `limit` - Items per page (default: 10)
|