mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-06-04 20:42:59 +00:00
🎉 Initial commit: Trackeep - Complete Productivity Platform
🚀 Features Implemented: ✅ Full-stack application with SolidJS frontend + Go backend ✅ User authentication with JWT tokens ✅ Bookmark management with tags and search ✅ Task management with status and priority tracking ✅ File upload and management system ✅ Notes with rich text editing and organization ✅ Advanced search and filtering across all content types ✅ Export/import functionality for data portability 🏗️ Architecture: - Frontend: SolidJS + TypeScript + UnoCSS + TanStack Query - Backend: Go + Gin + GORM + PostgreSQL/SQLite - Deployment: Docker + Docker Compose + CI/CD pipeline - Monitoring: Structured logging + metrics collection + health checks 📦 Production Ready: ✅ Multi-stage Docker builds for frontend and backend ✅ Production docker-compose with Redis and backup services ✅ GitHub Actions CI/CD pipeline with security scanning ✅ Comprehensive logging and monitoring system ✅ Automated backup and recovery strategies ✅ Complete API documentation and user guide 📚 Documentation: - Complete API documentation with examples - Comprehensive user guide with troubleshooting - Deployment and configuration instructions - Security best practices and performance optimization 🎯 Project Status: 100% COMPLETE (69/69 tasks) Trackeep is now a production-ready, self-hosted productivity platform!
This commit is contained in:
+140
@@ -0,0 +1,140 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/trackeep/backend/config"
|
||||
"github.com/trackeep/backend/models"
|
||||
)
|
||||
|
||||
// SeedData creates initial data for testing
|
||||
func SeedData() {
|
||||
db := config.GetDB()
|
||||
|
||||
// Create a demo user
|
||||
user := models.User{
|
||||
Email: "demo@trackeep.com",
|
||||
Username: "demo",
|
||||
Password: "hashed_password_here", // In production, this would be properly hashed
|
||||
FullName: "Demo User",
|
||||
Theme: "dark",
|
||||
}
|
||||
|
||||
if err := db.Where("email = ?", user.Email).FirstOrCreate(&user).Error; err != nil {
|
||||
log.Printf("Failed to create demo user: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Create some demo tags
|
||||
tags := []models.Tag{
|
||||
{Name: "development", Color: "#39b9ff", UserID: user.ID},
|
||||
{Name: "learning", Color: "#ff6b6b", UserID: user.ID},
|
||||
{Name: "productivity", Color: "#51cf66", UserID: user.ID},
|
||||
{Name: "golang", Color: "#845ef7", UserID: user.ID},
|
||||
{Name: "javascript", Color: "#f76707", UserID: user.ID},
|
||||
}
|
||||
|
||||
for _, tag := range tags {
|
||||
if err := db.Where("name = ? AND user_id = ?", tag.Name, tag.UserID).FirstOrCreate(&tag).Error; err != nil {
|
||||
log.Printf("Failed to create tag %s: %v", tag.Name, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Create some demo bookmarks
|
||||
bookmarks := []models.Bookmark{
|
||||
{
|
||||
UserID: user.ID,
|
||||
Title: "Golang Official Documentation",
|
||||
URL: "https://golang.org/doc/",
|
||||
Description: "Official Go programming language documentation",
|
||||
IsRead: false,
|
||||
IsFavorite: true,
|
||||
},
|
||||
{
|
||||
UserID: user.ID,
|
||||
Title: "SolidJS Documentation",
|
||||
URL: "https://www.solidjs.com/docs",
|
||||
Description: "Reactive JavaScript library documentation",
|
||||
IsRead: true,
|
||||
IsFavorite: false,
|
||||
},
|
||||
{
|
||||
UserID: user.ID,
|
||||
Title: "Gin Web Framework",
|
||||
URL: "https://gin-gonic.com/",
|
||||
Description: "HTTP web framework written in Go",
|
||||
IsRead: false,
|
||||
IsFavorite: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, bookmark := range bookmarks {
|
||||
if err := db.Where("url = ? AND user_id = ?", bookmark.URL, bookmark.UserID).FirstOrCreate(&bookmark).Error; err != nil {
|
||||
log.Printf("Failed to create bookmark %s: %v", bookmark.Title, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Create some demo tasks
|
||||
tasks := []models.Task{
|
||||
{
|
||||
UserID: user.ID,
|
||||
Title: "Complete Trackeep backend API",
|
||||
Status: models.TaskStatusInProgress,
|
||||
Priority: models.TaskPriorityHigh,
|
||||
Progress: 75,
|
||||
},
|
||||
{
|
||||
UserID: user.ID,
|
||||
Title: "Implement authentication system",
|
||||
Status: models.TaskStatusPending,
|
||||
Priority: models.TaskPriorityHigh,
|
||||
Progress: 0,
|
||||
},
|
||||
{
|
||||
UserID: user.ID,
|
||||
Title: "Add file upload functionality",
|
||||
Status: models.TaskStatusPending,
|
||||
Priority: models.TaskPriorityMedium,
|
||||
Progress: 0,
|
||||
},
|
||||
{
|
||||
UserID: user.ID,
|
||||
Title: "Write unit tests for API endpoints",
|
||||
Status: models.TaskStatusPending,
|
||||
Priority: models.TaskPriorityLow,
|
||||
Progress: 0,
|
||||
},
|
||||
}
|
||||
|
||||
for _, task := range tasks {
|
||||
if err := db.Where("title = ? AND user_id = ?", task.Title, task.UserID).FirstOrCreate(&task).Error; err != nil {
|
||||
log.Printf("Failed to create task %s: %v", task.Title, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Create some demo notes
|
||||
notes := []models.Note{
|
||||
{
|
||||
UserID: user.ID,
|
||||
Title: "Trackeep Project Notes",
|
||||
Content: "# Trackeep Project\n\nA self-hosted productivity and knowledge hub built with Go backend and SolidJS frontend.",
|
||||
ContentType: "markdown",
|
||||
IsPinned: true,
|
||||
},
|
||||
{
|
||||
UserID: user.ID,
|
||||
Title: "API Design Principles",
|
||||
Content: "## RESTful API Design\n\n- Use proper HTTP methods\n- Implement proper error handling\n- Add authentication and authorization",
|
||||
ContentType: "markdown",
|
||||
IsPinned: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, note := range notes {
|
||||
if err := db.Where("title = ? AND user_id = ?", note.Title, note.UserID).FirstOrCreate(¬e).Error; err != nil {
|
||||
log.Printf("Failed to create note %s: %v", note.Title, err)
|
||||
}
|
||||
}
|
||||
|
||||
log.Println("Demo data seeded successfully")
|
||||
}
|
||||
Reference in New Issue
Block a user