DevDesk is a comprehensive task and project management system built with Go and Gin, designed to streamline workflows and enhance team productivity. It provides tools for task tracking, project management, event coordination, and team collaboration.
- Features
- Project Structure
- Getting Started
- Prerequisites
- Installation
- Configuration
- Running the Application
- API Reference
- License
- Contributing
- π Task Management: Create, assign, track, and manage tasks with detailed status tracking.
- π Project Management: Organize tasks into projects with milestones and deadlines.
- π Event Coordination: Schedule and manage events with RSVP tracking.
- π₯ User Authentication: Secure login and registration system.
- π Role-Based Access Control: Differentiated access levels for different user roles.
- π Points System: Gamified task completion tracking.
- ποΈ Modular Architecture: Clean separation of concerns with models, services, and controllers.
- βοΈ Configuration Management: Centralized configuration with environment variable support.
/devdesk
βββ config/ # Configuration management
β βββ conf.yaml
β βββ config.go
βββ controllers/ # API request handlers
β βββ usercontroller.go
β βββ eventservice.go
β βββ ...
βββ db/ # Database initialization and connection
β βββ connect.go
β βββ initialize.go
βββ models/ # Database models and ORM
β βββ events.go
β βββ points.go
β βββ projects.go
β βββ tasks.go
β βββ teams.go
β βββ users.go
βββ services/ # Business logic layer
β βββ authservice.go
β βββ eventservice.go
β βββ taskservice.go
β βββ userservice.go
βββ middlewares/ # Custom middleware functions
β βββ auth.go
β βββ health.go
βββ .air.toml # Development server configuration
βββ .env.example # Environment variable template
βββ compose.yaml # Docker Compose configuration
βββ Dockerfile # Docker image configuration
βββ go.mod # Go module dependencies
βββ go.sum # Go module checksums
βββ main.go # Application entry point
Before you begin, ensure you have the following installed:
- Go (version 1.20 or higher)
- PostgreSQL (version 15 or higher) OR Docker for running the database in a container
- Git (for version control)
-
Clone the repository
git clone <repository-url> cd devdesk
-
Initialize the database
Option A: Using Docker (Recommended)
docker compose up -d
Option B: Local PostgreSQL
-
Ensure PostgreSQL is running and you have access
-
Run the initialization script:
go run -C db initialize.go
-
-
Configure environment variables
-
Create a
.envfile from the template:cp .env.example .env
-
Edit
.envand fill in your database credentials and other configuration values.
-
-
Install dependencies
go get ./...
-
Start the development server
go run main.go
Alternatively, if you have
airinstalled:air
The application uses go-yaml for configuration management. The default configuration file is located at config/conf.yaml.
| Section | Key | Type | Description |
|---|---|---|---|
server |
port |
string |
The port the server listens on |
server |
base_url |
string |
The base URL of the application |
database |
host |
string |
Database host |
database |
port |
string |
Database port |
database |
username |
string |
Database username |
database |
password |
string |
Database password |
database |
dbname |
string |
Database name |
database |
ssl_mode |
string |
SSL mode (e.g., "disable") |
jwt |
secret |
string |
JWT signing secret |
logging |
level |
string |
Log level (e.g., "debug", "info") |
Environment Variables
You can override any configuration value by setting the corresponding environment variable (e.g., DB_HOST, JWT_SECRET).
For automatic reloading on code changes:
airOr manually:
go run main.goThe server will start on http://localhost:8080 (or the port specified in the configuration).
For production deployment, use a production-ready server like:
npm run startTo create a production build:
make build| Method | Endpoint | Description |
|---|---|---|
POST |
/auth/register |
Register a new user |
POST |
/auth/login |
Login and receive JWT token |
| Method | Endpoint | Description |
|---|---|---|
GET |
/users/me |
Get current user profile (protected) |
| Method | Endpoint | Description |
|---|---|---|
GET |
/tasks |
Get all tasks (protected) |
GET |
/tasks/:id |
Get task details (protected) |
POST |
/tasks |
Create a new task (protected) |
PUT |
/tasks/:id |
Update task details (protected) |
DELETE |
/tasks/:id |
Delete a task (protected) |
| Method | Endpoint | Description |
|---|---|---|
GET |
/projects |
Get all projects (protected) |
GET |
/projects/:id |
Get project details (protected) |
POST |
/projects |
Create a new project (protected) |
PUT |
/projects/:id |
Update project details (protected) |
DELETE |
/projects/:id |
Delete a project (protected) |
| Method | Endpoint | Description |
|---|---|---|
GET |
/events |
Get all events |
POST |
/event |
Create a new event |
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the GNU AGPLv3 License. See LICENSE for more information.