shiori/internal/model/account.go

64 lines
1.5 KiB
Go
Raw Normal View History

package model
feat: allow per-user settings and store them in database (#639) * create needed field in sqlite database * update account model * update Account struct for save Account options * update sqlite database return account settings * save configure in sqlite as text and return that * read configure from user account and defualt configure for shiori * add api/ui for update settings in database user can save settings in database (in sqlite database) * check configures be in json format before save in database * support MariaDB * fix wrong comment * support PostgreSQL * revert unneeded change in new logic * change configures to config * change SaveAccount to SaveAccountSettings * add migrate database scripts * change default in migration scrtipts * update model * read config field as json from database * fix parse value config value & update config update * update default value for new user * update settings variable name to reflect database value in UI * fix typo * not panic if user not exist and update worng comment * visitor user can update there settings now * remove unneeded loading dialog * fix typo * update function for pg and mysql * remove IsJson * move scan method to model * simplify jsonify * simplify assignees value to account.Config * missing part of function * fix some typo and unneeded field in struct * add down migrate script for all database * change createEbook to CreateEbook * use json instead of text in mysql and postgres * implement * remove unneeded part * remove unneeded jsonify in code * return SelectContext and GetContext * remove defualt config in reques for new user it will be set in backend * New API * remove legacy API * remove validateSessionWithoutOwnerStatus * remove Jsonify function don't need that anymore * add unit test for database * update migrate script name * change put to patch * return PUT * fix Patch problem and now use PATCH instead of PUT * remove unneeded retuen * more cleaner code for request new settings * fix bug to handle string in Scan method thanks to fmartingr * fix Authorization & use GetAccount & remove username from request * shiori-settings remove and it read from shiori-account * add swagger documentation * API unit test * fix typo * remove unneeded coment Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com> * better Documentation Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com> * shiori-toke remove on logout * fix typo * add unit test check update config in database * update swag documentation * fix swag formaing error --------- Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com>
2023-10-15 21:27:54 +08:00
import (
"database/sql/driver"
"encoding/json"
"fmt"
)
// Account is the database model for account.
type Account struct {
feat: allow per-user settings and store them in database (#639) * create needed field in sqlite database * update account model * update Account struct for save Account options * update sqlite database return account settings * save configure in sqlite as text and return that * read configure from user account and defualt configure for shiori * add api/ui for update settings in database user can save settings in database (in sqlite database) * check configures be in json format before save in database * support MariaDB * fix wrong comment * support PostgreSQL * revert unneeded change in new logic * change configures to config * change SaveAccount to SaveAccountSettings * add migrate database scripts * change default in migration scrtipts * update model * read config field as json from database * fix parse value config value & update config update * update default value for new user * update settings variable name to reflect database value in UI * fix typo * not panic if user not exist and update worng comment * visitor user can update there settings now * remove unneeded loading dialog * fix typo * update function for pg and mysql * remove IsJson * move scan method to model * simplify jsonify * simplify assignees value to account.Config * missing part of function * fix some typo and unneeded field in struct * add down migrate script for all database * change createEbook to CreateEbook * use json instead of text in mysql and postgres * implement * remove unneeded part * remove unneeded jsonify in code * return SelectContext and GetContext * remove defualt config in reques for new user it will be set in backend * New API * remove legacy API * remove validateSessionWithoutOwnerStatus * remove Jsonify function don't need that anymore * add unit test for database * update migrate script name * change put to patch * return PUT * fix Patch problem and now use PATCH instead of PUT * remove unneeded retuen * more cleaner code for request new settings * fix bug to handle string in Scan method thanks to fmartingr * fix Authorization & use GetAccount & remove username from request * shiori-settings remove and it read from shiori-account * add swagger documentation * API unit test * fix typo * remove unneeded coment Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com> * better Documentation Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com> * shiori-toke remove on logout * fix typo * add unit test check update config in database * update swag documentation * fix swag formaing error --------- Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com>
2023-10-15 21:27:54 +08:00
ID int `db:"id" json:"id"`
Username string `db:"username" json:"username"`
Password string `db:"password" json:"password,omitempty"`
Owner bool `db:"owner" json:"owner"`
Config UserConfig `db:"config" json:"config"`
}
type UserConfig struct {
ShowId bool `json:"ShowId"`
ListMode bool `json:"ListMode"`
HideThumbnail bool `json:"HideThumbnail"`
HideExcerpt bool `json:"HideExcerpt"`
NightMode bool `json:"NightMode"`
KeepMetadata bool `json:"KeepMetadata"`
UseArchive bool `json:"UseArchive"`
CreateEbook bool `json:"CreateEbook"`
feat: allow per-user settings and store them in database (#639) * create needed field in sqlite database * update account model * update Account struct for save Account options * update sqlite database return account settings * save configure in sqlite as text and return that * read configure from user account and defualt configure for shiori * add api/ui for update settings in database user can save settings in database (in sqlite database) * check configures be in json format before save in database * support MariaDB * fix wrong comment * support PostgreSQL * revert unneeded change in new logic * change configures to config * change SaveAccount to SaveAccountSettings * add migrate database scripts * change default in migration scrtipts * update model * read config field as json from database * fix parse value config value & update config update * update default value for new user * update settings variable name to reflect database value in UI * fix typo * not panic if user not exist and update worng comment * visitor user can update there settings now * remove unneeded loading dialog * fix typo * update function for pg and mysql * remove IsJson * move scan method to model * simplify jsonify * simplify assignees value to account.Config * missing part of function * fix some typo and unneeded field in struct * add down migrate script for all database * change createEbook to CreateEbook * use json instead of text in mysql and postgres * implement * remove unneeded part * remove unneeded jsonify in code * return SelectContext and GetContext * remove defualt config in reques for new user it will be set in backend * New API * remove legacy API * remove validateSessionWithoutOwnerStatus * remove Jsonify function don't need that anymore * add unit test for database * update migrate script name * change put to patch * return PUT * fix Patch problem and now use PATCH instead of PUT * remove unneeded retuen * more cleaner code for request new settings * fix bug to handle string in Scan method thanks to fmartingr * fix Authorization & use GetAccount & remove username from request * shiori-settings remove and it read from shiori-account * add swagger documentation * API unit test * fix typo * remove unneeded coment Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com> * better Documentation Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com> * shiori-toke remove on logout * fix typo * add unit test check update config in database * update swag documentation * fix swag formaing error --------- Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com>
2023-10-15 21:27:54 +08:00
MakePublic bool `json:"MakePublic"`
}
func (c *UserConfig) Scan(value interface{}) error {
switch v := value.(type) {
case []byte:
json.Unmarshal(v, &c)
return nil
case string:
json.Unmarshal([]byte(v), &c)
return nil
default:
return fmt.Errorf("unsupported type: %T", v)
}
}
func (c UserConfig) Value() (driver.Value, error) {
return json.Marshal(c)
}
// ToDTO converts Account to AccountDTO.
func (a Account) ToDTO() AccountDTO {
return AccountDTO{
ID: a.ID,
Username: a.Username,
Owner: a.Owner,
feat: allow per-user settings and store them in database (#639) * create needed field in sqlite database * update account model * update Account struct for save Account options * update sqlite database return account settings * save configure in sqlite as text and return that * read configure from user account and defualt configure for shiori * add api/ui for update settings in database user can save settings in database (in sqlite database) * check configures be in json format before save in database * support MariaDB * fix wrong comment * support PostgreSQL * revert unneeded change in new logic * change configures to config * change SaveAccount to SaveAccountSettings * add migrate database scripts * change default in migration scrtipts * update model * read config field as json from database * fix parse value config value & update config update * update default value for new user * update settings variable name to reflect database value in UI * fix typo * not panic if user not exist and update worng comment * visitor user can update there settings now * remove unneeded loading dialog * fix typo * update function for pg and mysql * remove IsJson * move scan method to model * simplify jsonify * simplify assignees value to account.Config * missing part of function * fix some typo and unneeded field in struct * add down migrate script for all database * change createEbook to CreateEbook * use json instead of text in mysql and postgres * implement * remove unneeded part * remove unneeded jsonify in code * return SelectContext and GetContext * remove defualt config in reques for new user it will be set in backend * New API * remove legacy API * remove validateSessionWithoutOwnerStatus * remove Jsonify function don't need that anymore * add unit test for database * update migrate script name * change put to patch * return PUT * fix Patch problem and now use PATCH instead of PUT * remove unneeded retuen * more cleaner code for request new settings * fix bug to handle string in Scan method thanks to fmartingr * fix Authorization & use GetAccount & remove username from request * shiori-settings remove and it read from shiori-account * add swagger documentation * API unit test * fix typo * remove unneeded coment Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com> * better Documentation Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com> * shiori-toke remove on logout * fix typo * add unit test check update config in database * update swag documentation * fix swag formaing error --------- Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com>
2023-10-15 21:27:54 +08:00
Config: a.Config,
}
}
// AccountDTO is data transfer object for Account.
type AccountDTO struct {
feat: allow per-user settings and store them in database (#639) * create needed field in sqlite database * update account model * update Account struct for save Account options * update sqlite database return account settings * save configure in sqlite as text and return that * read configure from user account and defualt configure for shiori * add api/ui for update settings in database user can save settings in database (in sqlite database) * check configures be in json format before save in database * support MariaDB * fix wrong comment * support PostgreSQL * revert unneeded change in new logic * change configures to config * change SaveAccount to SaveAccountSettings * add migrate database scripts * change default in migration scrtipts * update model * read config field as json from database * fix parse value config value & update config update * update default value for new user * update settings variable name to reflect database value in UI * fix typo * not panic if user not exist and update worng comment * visitor user can update there settings now * remove unneeded loading dialog * fix typo * update function for pg and mysql * remove IsJson * move scan method to model * simplify jsonify * simplify assignees value to account.Config * missing part of function * fix some typo and unneeded field in struct * add down migrate script for all database * change createEbook to CreateEbook * use json instead of text in mysql and postgres * implement * remove unneeded part * remove unneeded jsonify in code * return SelectContext and GetContext * remove defualt config in reques for new user it will be set in backend * New API * remove legacy API * remove validateSessionWithoutOwnerStatus * remove Jsonify function don't need that anymore * add unit test for database * update migrate script name * change put to patch * return PUT * fix Patch problem and now use PATCH instead of PUT * remove unneeded retuen * more cleaner code for request new settings * fix bug to handle string in Scan method thanks to fmartingr * fix Authorization & use GetAccount & remove username from request * shiori-settings remove and it read from shiori-account * add swagger documentation * API unit test * fix typo * remove unneeded coment Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com> * better Documentation Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com> * shiori-toke remove on logout * fix typo * add unit test check update config in database * update swag documentation * fix swag formaing error --------- Co-authored-by: Felipe Martin <812088+fmartingr@users.noreply.github.com>
2023-10-15 21:27:54 +08:00
ID int `json:"id"`
Username string `json:"username"`
Owner bool `json:"owner"`
Config UserConfig `json:"config"`
}