🏡 index : quine-global-labs/nugitea.git

package db

// This file defines the database schema for our enhanced nugitea system

// User table structure
type User struct {
	ID       int64  `json:"id"`
	Name     string `json:"name"`
	Email    string `json:"email"`
	Password string `json:"password"`
	Admin    bool   `json:"admin"`
	Created  int64  `json:"created"`
	Updated  int64  `json:"updated"`
}

// Team table structure  
type Team struct {
	ID      int64  `json:"id"`
	Name    string `json:"name"`
	Created int64  `json:"created"`
	Updated int64  `json:"updated"`
}

// TeamMember table (many-to-many relationship between users and teams)
type TeamMember struct {
	TeamID   int64 `json:"team_id"`
	UserID   int64 `json:"user_id"`
	Created  int64 `json:"created"`
}

// Repository table structure
type Repository struct {
	ID          int64  `json:"id"`
	Name        string `json:"name"`
	Description string `json:"description"`
	Private     bool   `json:"private"`
	Created     int64  `json:"created"`
	Updated     int64  `json:"updated"`
	OwnerID     int64  `json:"owner_id"`
}

// Issue table structure
type Issue struct {
	ID          int64  `json:"id"`
	Title       string `json:"title"`
	Description string `json:"description"`
	Status      string `json:"status"` // open, closed
	AssigneeID  *int64 `json:"assignee_id,omitempty"`
	CreatorID   int64  `json:"creator_id"`
	RepoID      int64  `json:"repo_id"`
	Created     int64  `json:"created"`
	Updated     int64  `json:"updated"`
}

// PullRequest table structure
type PullRequest struct {
	ID           int64  `json:"id"`
	Title        string `json:"title"`
	Description  string `json:"description"`
	Status       string `json:"status"` // open, closed, merged
	SourceRepoID int64  `json:"source_repo_id"`
	TargetRepoID int64  `json:"target_repo_id"`
	SourceRef    string `json:"source_ref"`
	TargetRef    string `json:"target_ref"`
	CreatorID    int64  `json:"creator_id"`
	Created      int64  `json:"created"`
	Updated      int64  `json:"updated"`
}

// Migration script to create tables
const CreateTablesSQL = `
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT UNIQUE NOT NULL,
    email TEXT UNIQUE NOT NULL,
    password TEXT NOT NULL,
    admin BOOLEAN DEFAULT FALSE,
    created INTEGER NOT NULL,
    updated INTEGER NOT NULL
);

CREATE TABLE IF NOT EXISTS teams (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT UNIQUE NOT NULL,
    created INTEGER NOT NULL,
    updated INTEGER NOT NULL
);

CREATE TABLE IF NOT EXISTS team_members (
    team_id INTEGER NOT NULL,
    user_id INTEGER NOT NULL,
    created INTEGER NOT NULL,
    PRIMARY KEY (team_id, user_id)
);

CREATE TABLE IF NOT EXISTS repositories (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    description TEXT,
    private BOOLEAN DEFAULT FALSE,
    created INTEGER NOT NULL,
    updated INTEGER NOT NULL,
    owner_id INTEGER NOT NULL
);

CREATE TABLE IF NOT EXISTS issues (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    description TEXT,
    status TEXT DEFAULT 'open',
    assignee_id INTEGER,
    creator_id INTEGER NOT NULL,
    repo_id INTEGER NOT NULL,
    created INTEGER NOT NULL,
    updated INTEGER NOT NULL
);

CREATE TABLE IF NOT EXISTS pull_requests (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    description TEXT,
    status TEXT DEFAULT 'open',
    source_repo_id INTEGER NOT NULL,
    target_repo_id INTEGER NOT NULL,
    source_ref TEXT NOT NULL,
    target_ref TEXT NOT NULL,
    creator_id INTEGER NOT NULL,
    created INTEGER NOT NULL,
    updated INTEGER NOT NULL
);
`