Skip to content

Change in attributes and pk, and implement constraints (#19) #20

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 31 additions & 31 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -243,57 +243,57 @@ await chain.invoke({
```mermaid
erDiagram
Repository {
string Url PK
string Owner
string Repo
string Language
string Descriptions
string DefaultRepo
int stars
int forks
string url PK
string owner
string repo
string language
string descriptions
string default_branch
integer stars
integer forks
}

Topics {
string Topic PK
string topic_name PK
}

RepositoryTopics {
string RepositoryUrl FK "References Repository"
string Topic FK "References Topics"
string repository_url FK "References Repository"
string topic_name FK "References Topics"
}

Branch {
string LastCommitSha PK
string Name PK
date Seen
string AiAnalysisSummary
string Url FK "References Repository"
integer branch_id PK
string last_commit_sha
string name
string repository_url FK "References Repository"
string commit_at
string created_at
string ai_summary
}

Folder {
int FolderId PK
string Name
string Path "Optional"
string ParentFolderId FK "References Folder"
string AiAnalysisSummary
string BranchSha FK "References Branch"
string BranchName FK "References Branch"
integer folder_id PK
string name
string path
integer parent_folder_id FK "References Folder"
string ai_summary
integer branch_id FK "References Branch"
}

File {
int FileID PK
string Name
string Sha
string Language
string Content
string AiAnalysisSummary
int FolderId FK "References Folder"
integer file_id PK
string name
string language
integer folder_id FK "References Folder"
string content
string ai_summary
}

Repository ||--o{ Branch : has
Repository ||--o{ RepositoryTopics : has
RepositoryTopics }o--|| Topics : references
Branch ||--o{ Folder : contains
Folder ||--o{ Folder : has_parent
Folder ||--|{ File : contain
Folder ||--|{ File : contains
```
72 changes: 38 additions & 34 deletions src/db/migrations/create_tables.sql
Original file line number Diff line number Diff line change
@@ -1,55 +1,59 @@
CREATE TABLE Repository (
url VARCHAR(255) PRIMARY KEY,
owner VARCHAR(50) NOT NULL,
repo VARCHAR(50) NOT NULL,
language VARCHAR(20) NOT NULL,
descriptions TEXT,
default_branch VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
CREATE TABLE IF NOT EXISTS Repository (
url VARCHAR(255) PRIMARY KEY,
owner VARCHAR(50) NOT NULL,
repo VARCHAR(50) NOT NULL,
language VARCHAR(20) NOT NULL,
descriptions TEXT,
default_branch VARCHAR(50),
stars INT,
forks INT
);

CREATE TABLE Topics (
topic_name VARCHAR(50) PRIMARY KEY
CREATE TABLE IF NOT EXISTS Topics (
topic_name VARCHAR(50) PRIMARY KEY
);

CREATE TABLE RepositoryTopics (
repository_url VARCHAR(255),
topic_name VARCHAR(50),
CREATE TABLE IF NOT EXISTS RepositoryTopics (
repository_url VARCHAR(255),
topic_name VARCHAR(50),
PRIMARY KEY (repository_url, topic_name),
FOREIGN KEY (repository_url) REFERENCES Repository(url),
FOREIGN KEY (topic_name) REFERENCES Topics(topic_name)
);


/**
Last Commit SHA length: https://stackoverflow.com/questions/18134627/how-much-of-a-git-sha-is-generally-considered-necessary-to-uniquely-identify-a
*/
CREATE TABLE Branch (
last_commit_sha VARCHAR(40) NOT NULL PRIMARY KEY,
CREATE TABLE IF NOT EXISTS Branch (
branch_id SERIAL PRIMARY KEY,
last_commit_sha VARCHAR(40) NOT NULL,
name VARCHAR(50) NOT NULL,
repository_url VARCHAR(255),
commit_at TIMESTAMP,
CONSTRAINT fk_repository FOREIGN KEY (repository_url) REFERENCES Repository(url)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ai_summary TEXT,
FOREIGN KEY (repository_url) REFERENCES Repository(url),
CONSTRAINT unique_last_commit_per_repo UNIQUE (repository_url, last_commit_sha)
);

CREATE TABLE Folder (
folder_id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
path VARCHAR(100),
parent_folder_id SERIAL,
branch_sha VARCHAR(40) NOT NULL,
branch_name VARCHAR(50) NOT NULL,
CREATE TABLE IF NOT EXISTS Folder (
folder_id SERIAL PRIMARY KEY,
name VARCHAR(30),
path VARCHAR(100) NOT NULL,
parent_folder_id INTEGER,
ai_summary TEXT,
branch_id INTEGER NOT NULL,
FOREIGN KEY (parent_folder_id) REFERENCES Folder(folder_id),
FOREIGN KEY (branch_sha) REFERENCES Branch(last_commit_sha),
FOREIGN KEY (branch_name) REFERENCES Branch(name)
FOREIGN KEY (branch_id) REFERENCES Branch(branch_id),
CHECK ( (path = '' AND parent_folder_id IS NULL) OR (path != '' AND parent_folder_id IS NOT NULL) )
);

CREATE TABLE File (
file_id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
sha VARCHAR(40) NOT NULL,
language VARCHAR(20),
parent_folder_id SERIAL NOT NULL,
ai_summary TEXT,
FOREIGN KEY (parent_folder_id) REFERENCES Folder(folder_id)
CREATE TABLE IF NOT EXISTS File (
file_id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
language VARCHAR(20),
folder_id INTEGER NOT NULL,
content TEXT,
ai_summary TEXT,
FOREIGN KEY (folder_id) REFERENCES Folder(folder_id)
);
Loading