mirror of
https://github.com/lordmathis/lemma.git
synced 2025-11-05 23:44:22 +00:00
Update documentation
This commit is contained in:
@@ -57,14 +57,20 @@ package app // import "lemma/internal/app"
|
|||||||
Package app provides application-level functionality for initializing and
|
Package app provides application-level functionality for initializing and
|
||||||
running the server
|
running the server
|
||||||
|
|
||||||
|
FUNCTIONS
|
||||||
|
|
||||||
|
func ParseDBURL(dbURL string) (db.DBType, string, error)
|
||||||
|
ParseDBURL parses a database URL and returns the driver name and data source
|
||||||
|
|
||||||
|
|
||||||
TYPES
|
TYPES
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
DBPath string
|
DBURL string
|
||||||
|
DBType db.DBType
|
||||||
WorkDir string
|
WorkDir string
|
||||||
StaticPath string
|
StaticPath string
|
||||||
Port string
|
Port string
|
||||||
RootURL string
|
|
||||||
Domain string
|
Domain string
|
||||||
CORSOrigins []string
|
CORSOrigins []string
|
||||||
AdminEmail string
|
AdminEmail string
|
||||||
@@ -281,6 +287,24 @@ const (
|
|||||||
|
|
||||||
TYPES
|
TYPES
|
||||||
|
|
||||||
|
type DBField struct {
|
||||||
|
Name string
|
||||||
|
Value any
|
||||||
|
Type reflect.Type
|
||||||
|
OriginalName string
|
||||||
|
|
||||||
|
// Has unexported fields.
|
||||||
|
}
|
||||||
|
|
||||||
|
func StructTagsToFields(s any) ([]DBField, error)
|
||||||
|
StructTagsToFields converts a struct to a slice of DBField instances
|
||||||
|
|
||||||
|
type DBType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
DBTypeSQLite DBType = "sqlite3"
|
||||||
|
DBTypePostgres DBType = "postgres"
|
||||||
|
)
|
||||||
type Database interface {
|
type Database interface {
|
||||||
UserStore
|
UserStore
|
||||||
WorkspaceStore
|
WorkspaceStore
|
||||||
@@ -292,14 +316,115 @@ type Database interface {
|
|||||||
}
|
}
|
||||||
Database defines the methods for interacting with the database
|
Database defines the methods for interacting with the database
|
||||||
|
|
||||||
func Init(dbPath string, secretsService secrets.Service) (Database, error)
|
func Init(dbType DBType, dbURL string, secretsService secrets.Service) (Database, error)
|
||||||
Init initializes the database connection
|
Init initializes the database connection
|
||||||
|
|
||||||
type Migration struct {
|
type JoinType string
|
||||||
Version int
|
|
||||||
SQL string
|
const (
|
||||||
|
InnerJoin JoinType = "INNER JOIN"
|
||||||
|
LeftJoin JoinType = "LEFT JOIN"
|
||||||
|
RightJoin JoinType = "RIGHT JOIN"
|
||||||
|
)
|
||||||
|
type Query struct {
|
||||||
|
// Has unexported fields.
|
||||||
}
|
}
|
||||||
Migration represents a database migration
|
Query represents a SQL query with its parameters
|
||||||
|
|
||||||
|
func NewQuery(dbType DBType, secretsService secrets.Service) *Query
|
||||||
|
NewQuery creates a new Query instance
|
||||||
|
|
||||||
|
func (q *Query) AddArgs(args ...any) *Query
|
||||||
|
AddArgs adds arguments to the query
|
||||||
|
|
||||||
|
func (q *Query) And(condition string) *Query
|
||||||
|
And adds an AND condition
|
||||||
|
|
||||||
|
func (q *Query) Args() []any
|
||||||
|
Args returns the query arguments
|
||||||
|
|
||||||
|
func (q *Query) Delete() *Query
|
||||||
|
Delete starts a DELETE statement
|
||||||
|
|
||||||
|
func (q *Query) EndGroup() *Query
|
||||||
|
EndGroup ends a parenthetical group
|
||||||
|
|
||||||
|
func (q *Query) From(table string) *Query
|
||||||
|
From adds a FROM clause
|
||||||
|
|
||||||
|
func (q *Query) GroupBy(columns ...string) *Query
|
||||||
|
GroupBy adds a GROUP BY clause
|
||||||
|
|
||||||
|
func (q *Query) Having(condition string) *Query
|
||||||
|
Having adds a HAVING clause for filtering groups
|
||||||
|
|
||||||
|
func (q *Query) Insert(table string, columns ...string) *Query
|
||||||
|
Insert starts an INSERT statement
|
||||||
|
|
||||||
|
func (q *Query) InsertStruct(s any, table string) (*Query, error)
|
||||||
|
InsertStruct creates an INSERT query from a struct
|
||||||
|
|
||||||
|
func (q *Query) Join(joinType JoinType, table, condition string) *Query
|
||||||
|
Join adds a JOIN clause
|
||||||
|
|
||||||
|
func (q *Query) Limit(limit int) *Query
|
||||||
|
Limit adds a LIMIT clause
|
||||||
|
|
||||||
|
func (q *Query) Offset(offset int) *Query
|
||||||
|
Offset adds an OFFSET clause
|
||||||
|
|
||||||
|
func (q *Query) Or(condition string) *Query
|
||||||
|
Or adds an OR condition
|
||||||
|
|
||||||
|
func (q *Query) OrderBy(columns ...string) *Query
|
||||||
|
OrderBy adds an ORDER BY clause
|
||||||
|
|
||||||
|
func (q *Query) Placeholder(arg any) *Query
|
||||||
|
Placeholder adds a placeholder for a single argument
|
||||||
|
|
||||||
|
func (q *Query) Placeholders(n int) *Query
|
||||||
|
Placeholders adds n placeholders separated by commas
|
||||||
|
|
||||||
|
func (q *Query) Returning(columns ...string) *Query
|
||||||
|
Returning adds a RETURNING clause for both PostgreSQL and SQLite (3.35.0+)
|
||||||
|
|
||||||
|
func (q *Query) Select(columns ...string) *Query
|
||||||
|
Select adds a SELECT clause
|
||||||
|
|
||||||
|
func (q *Query) SelectStruct(s any, table string) (*Query, error)
|
||||||
|
SelectStruct creates a SELECT query from a struct
|
||||||
|
|
||||||
|
func (q *Query) Set(column string) *Query
|
||||||
|
Set adds a SET clause for updates
|
||||||
|
|
||||||
|
func (q *Query) StartGroup() *Query
|
||||||
|
StartGroup starts a parenthetical group
|
||||||
|
|
||||||
|
func (q *Query) String() string
|
||||||
|
String returns the formatted query string
|
||||||
|
|
||||||
|
func (q *Query) Update(table string) *Query
|
||||||
|
Update starts an UPDATE statement
|
||||||
|
|
||||||
|
func (q *Query) UpdateStruct(s any, table string) (*Query, error)
|
||||||
|
UpdateStruct creates an UPDATE query from a struct
|
||||||
|
|
||||||
|
func (q *Query) Values(count int) *Query
|
||||||
|
Values adds a VALUES clause
|
||||||
|
|
||||||
|
func (q *Query) Where(condition string) *Query
|
||||||
|
Where adds a WHERE clause
|
||||||
|
|
||||||
|
func (q *Query) WhereIn(column string, count int) *Query
|
||||||
|
WhereIn adds a WHERE IN clause
|
||||||
|
|
||||||
|
func (q *Query) Write(s string) *Query
|
||||||
|
Write adds a string to the query
|
||||||
|
|
||||||
|
type Scanner interface {
|
||||||
|
Scan(dest ...any) error
|
||||||
|
}
|
||||||
|
Scanner is an interface that both sql.Row and sql.Rows satisfy
|
||||||
|
|
||||||
type SessionStore interface {
|
type SessionStore interface {
|
||||||
CreateSession(session *models.Session) error
|
CreateSession(session *models.Session) error
|
||||||
@@ -897,22 +1022,22 @@ and serialize data in the application.
|
|||||||
TYPES
|
TYPES
|
||||||
|
|
||||||
type Session struct {
|
type Session struct {
|
||||||
ID string // Unique session identifier
|
ID string `db:"id"` // Unique session identifier
|
||||||
UserID int // ID of the user this session belongs to
|
UserID int `db:"user_id"` // ID of the user this session belongs to
|
||||||
RefreshToken string // The refresh token associated with this session
|
RefreshToken string `db:"refresh_token"` // The refresh token associated with this session
|
||||||
ExpiresAt time.Time // When this session expires
|
ExpiresAt time.Time `db:"expires_at"` // When this session expires
|
||||||
CreatedAt time.Time // When this session was created
|
CreatedAt time.Time `db:"created_at,default"` // When this session was created
|
||||||
}
|
}
|
||||||
Session represents a user session in the database
|
Session represents a user session in the database
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
ID int `json:"id" validate:"required,min=1"`
|
ID int `json:"id" db:"id,default" validate:"required,min=1"`
|
||||||
Email string `json:"email" validate:"required,email"`
|
Email string `json:"email" db:"email" validate:"required,email"`
|
||||||
DisplayName string `json:"displayName"`
|
DisplayName string `json:"displayName" db:"display_name"`
|
||||||
PasswordHash string `json:"-"`
|
PasswordHash string `json:"-" db:"password_hash"`
|
||||||
Role UserRole `json:"role" validate:"required,oneof=admin editor viewer"`
|
Role UserRole `json:"role" db:"role" validate:"required,oneof=admin editor viewer"`
|
||||||
CreatedAt time.Time `json:"createdAt"`
|
CreatedAt time.Time `json:"createdAt" db:"created_at,default"`
|
||||||
LastWorkspaceID int `json:"lastWorkspaceId"`
|
LastWorkspaceID int `json:"lastWorkspaceId" db:"last_workspace_id"`
|
||||||
}
|
}
|
||||||
User represents a user in the system
|
User represents a user in the system
|
||||||
|
|
||||||
@@ -930,24 +1055,24 @@ const (
|
|||||||
User roles
|
User roles
|
||||||
|
|
||||||
type Workspace struct {
|
type Workspace struct {
|
||||||
ID int `json:"id" validate:"required,min=1"`
|
ID int `json:"id" db:"id,default" validate:"required,min=1"`
|
||||||
UserID int `json:"userId" validate:"required,min=1"`
|
UserID int `json:"userId" db:"user_id" validate:"required,min=1"`
|
||||||
Name string `json:"name" validate:"required"`
|
Name string `json:"name" db:"name" validate:"required"`
|
||||||
CreatedAt time.Time `json:"createdAt"`
|
CreatedAt time.Time `json:"createdAt" db:"created_at,default"`
|
||||||
LastOpenedFilePath string `json:"lastOpenedFilePath"`
|
LastOpenedFilePath string `json:"lastOpenedFilePath" db:"last_opened_file_path"`
|
||||||
|
|
||||||
// Integrated settings
|
// Integrated settings
|
||||||
Theme string `json:"theme" validate:"oneof=light dark"`
|
Theme string `json:"theme" db:"theme" validate:"oneof=light dark"`
|
||||||
AutoSave bool `json:"autoSave"`
|
AutoSave bool `json:"autoSave" db:"auto_save"`
|
||||||
ShowHiddenFiles bool `json:"showHiddenFiles"`
|
ShowHiddenFiles bool `json:"showHiddenFiles" db:"show_hidden_files"`
|
||||||
GitEnabled bool `json:"gitEnabled"`
|
GitEnabled bool `json:"gitEnabled" db:"git_enabled"`
|
||||||
GitURL string `json:"gitUrl" validate:"required_if=GitEnabled true"`
|
GitURL string `json:"gitUrl" db:"git_url,ommitempty" validate:"required_if=GitEnabled true"`
|
||||||
GitUser string `json:"gitUser" validate:"required_if=GitEnabled true"`
|
GitUser string `json:"gitUser" db:"git_user,ommitempty" validate:"required_if=GitEnabled true"`
|
||||||
GitToken string `json:"gitToken" validate:"required_if=GitEnabled true"`
|
GitToken string `json:"gitToken" db:"git_token,ommitempty,encrypted" validate:"required_if=GitEnabled true"`
|
||||||
GitAutoCommit bool `json:"gitAutoCommit"`
|
GitAutoCommit bool `json:"gitAutoCommit" db:"git_auto_commit"`
|
||||||
GitCommitMsgTemplate string `json:"gitCommitMsgTemplate"`
|
GitCommitMsgTemplate string `json:"gitCommitMsgTemplate" db:"git_commit_msg_template"`
|
||||||
GitCommitName string `json:"gitCommitName"`
|
GitCommitName string `json:"gitCommitName" db:"git_commit_name"`
|
||||||
GitCommitEmail string `json:"gitCommitEmail" validate:"omitempty,required_if=GitEnabled true,email"`
|
GitCommitEmail string `json:"gitCommitEmail" db:"git_commit_email" validate:"omitempty,required_if=GitEnabled true,email"`
|
||||||
}
|
}
|
||||||
Workspace represents a user's workspace in the system
|
Workspace represents a user's workspace in the system
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user