GraphQL API and utilities for the rpdata project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.0 KiB

  1. package postgres
  2. import (
  3. "context"
  4. "database/sql"
  5. "fmt"
  6. "git.aiterp.net/rpdata/api/database/postgres/psqlcore"
  7. "git.aiterp.net/rpdata/api/internal/config"
  8. "git.aiterp.net/rpdata/api/repositories"
  9. "time"
  10. )
  11. func Connect(cfg config.Database) (*DB, error) {
  12. sslMode := "disable"
  13. if cfg.SSL {
  14. sslMode = "enable"
  15. }
  16. psqlInfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=%s",
  17. cfg.Host, cfg.Port, cfg.Username, cfg.Password, cfg.Db, sslMode,
  18. )
  19. timeout, cancel := context.WithTimeout(context.Background(), time.Second*15)
  20. defer cancel()
  21. db, err := sql.Open("postgres", psqlInfo)
  22. if err != nil {
  23. return nil, err
  24. }
  25. if err := db.PingContext(timeout); err != nil {
  26. return nil, err
  27. }
  28. q := psqlcore.New(db)
  29. if err := q.EnsureCounter(timeout, "data_character_id"); err != nil {
  30. return nil, err
  31. }
  32. return &DB{
  33. db: db,
  34. insertWithIDs: cfg.RestoreIDs,
  35. }, nil
  36. }
  37. type DB struct {
  38. insertWithIDs bool
  39. db *sql.DB
  40. }
  41. func (d *DB) Changes() repositories.ChangeRepository {
  42. panic("implement me")
  43. }
  44. func (d *DB) Channels() repositories.ChannelRepository {
  45. panic("implement me")
  46. }
  47. func (d *DB) Characters() repositories.CharacterRepository {
  48. return &characterRepository{insertWithIDs: d.insertWithIDs, db: d.db}
  49. }
  50. func (d *DB) Tags() repositories.TagRepository {
  51. panic("implement me")
  52. }
  53. func (d *DB) Logs() repositories.LogRepository {
  54. panic("implement me")
  55. }
  56. func (d *DB) Posts() repositories.PostRepository {
  57. panic("implement me")
  58. }
  59. func (d *DB) Stories() repositories.StoryRepository {
  60. panic("implement me")
  61. }
  62. func (d *DB) Chapters() repositories.ChapterRepository {
  63. panic("implement me")
  64. }
  65. func (d *DB) Comments() repositories.CommentRepository {
  66. panic("implement me")
  67. }
  68. func (d *DB) Keys() repositories.KeyRepository {
  69. panic("implement me")
  70. }
  71. func (d *DB) Users() repositories.UserRepository {
  72. panic("implement me")
  73. }
  74. func (d *DB) Files() repositories.FileRepository {
  75. panic("implement me")
  76. }
  77. func (d *DB) Close(context.Context) error {
  78. return d.db.Close()
  79. }