diff --git a/.gitignore b/.gitignore index 02503d0..b33a08d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ bin/ -docker/environment +docker/postgresql.env +docker/mysql.env restockbot.db restockbot.json restockbot.log diff --git a/README.md b/README.md index 5325c4d..d98ea97 100644 --- a/README.md +++ b/README.md @@ -73,13 +73,29 @@ Don't forget to prefix the channel name with an `@`. ### Database + +#### SQLite (default) + Default database driver is SQLite using the `restockbot.db` file. +#### PostgreSQL + To configure a PostgreSQL database, you can use Docker: ``` -cp -p docker/environment.example docker/environment -docker-compose -f docker-compose.yml up -d +cp -p docker/postgresql.env.example docker/postgresql.env +docker-compose -f docker-compose-postgresql.yml up -d +``` + +Then see the configuration section to define the database configuration. + +#### MySQL + +To configure a MySQL database, you can use Docker: + +``` +cp -p docker/mysql.env.example docker/mysql.env +docker-compose -f docker-compose-mysql.yml up -d ``` Then see the configuration section to define the database configuration. @@ -130,7 +146,7 @@ Default file is `restockbot.json` in the current directory. The file name can be Options: * `database` (optional) - * `type`: driver to use (`postgres`, `sqlite`) + * `type`: driver to use (`sqlite`, `postgres`, `mysql`) * `dsn`: data source name (see [documentation](https://gorm.io/docs/connecting_to_the_database.html)) * `urls` (optional): list of retailers web pages * `amazon` (optional) diff --git a/db.go b/db.go index b9ccec9..ba14602 100644 --- a/db.go +++ b/db.go @@ -1,6 +1,7 @@ package main import ( + "gorm.io/driver/mysql" "gorm.io/driver/postgres" "gorm.io/driver/sqlite" "gorm.io/gorm" @@ -11,6 +12,8 @@ func NewDatabaseFromConfig(config DatabaseConfig) (*gorm.DB, error) { switch config.Type { case "postgres": return gorm.Open(postgres.New(postgres.Config{DSN: config.DSN}), &gorm.Config{}) + case "mysql": + return gorm.Open(mysql.New(mysql.Config{DSN: config.DSN}), &gorm.Config{}) default: return gorm.Open(sqlite.Open(config.DSN), &gorm.Config{}) } diff --git a/docker-compose-mysql.yml b/docker-compose-mysql.yml new file mode 100644 index 0000000..b8368a2 --- /dev/null +++ b/docker-compose-mysql.yml @@ -0,0 +1,24 @@ +--- +version: "2" + +services: + chromium: + container_name: restockbot-chromium + image: montferret/chromium + ports: + - "9222:9222" + restart: always + mysql: + container_name: restockbot-mysql + env_file: + - ./docker/mysql.env + image: mysql:8 + ports: + - "3306:3306" + volumes: + - mysql-storage:/var/lib/mysql + restart: always + +volumes: + mysql-storage: + driver: local \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose-postgresql.yml similarity index 92% rename from docker-compose.yml rename to docker-compose-postgresql.yml index ab03775..a9cef30 100644 --- a/docker-compose.yml +++ b/docker-compose-postgresql.yml @@ -11,7 +11,7 @@ services: postgres: container_name: restockbot-postgres env_file: - - ./docker/environment + - ./docker/postgresql.env image: postgres:13 ports: - "5432:5432" diff --git a/docker/mysql.env.example b/docker/mysql.env.example new file mode 100644 index 0000000..10e4bde --- /dev/null +++ b/docker/mysql.env.example @@ -0,0 +1,5 @@ +MYSQL_RANDOM_ROOT_PASSWORD=1 +MYSQL_ONETIME_PASSWORD=1 +MYSQL_DATABASE=restockbot +MYSQL_USER=restockbot +MYSQL_PASSWORD= \ No newline at end of file diff --git a/docker/environment.example b/docker/postgresql.env.example similarity index 62% rename from docker/environment.example rename to docker/postgresql.env.example index 56b5a24..91119bb 100644 --- a/docker/environment.example +++ b/docker/postgresql.env.example @@ -1,4 +1,4 @@ POSTGRES_PASSWORD= POSTGRES_USER=restockbot POSTGRES_DB=restockbot -POSTGRES_INITDB_ARGS="--data-checksums" +POSTGRES_INITDB_ARGS="--data-checksums" \ No newline at end of file diff --git a/go.mod b/go.mod index d6d4e07..05e7ab4 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,8 @@ require ( github.com/gorilla/mux v1.8.0 github.com/sirupsen/logrus v1.8.0 github.com/spiegel-im-spiegel/pa-api v0.9.0 + gorm.io/driver/mysql v1.0.5 gorm.io/driver/postgres v1.0.8 gorm.io/driver/sqlite v1.1.4 - gorm.io/gorm v1.20.12 + gorm.io/gorm v1.21.3 ) diff --git a/go.sum b/go.sum index 7d731c2..deecb07 100644 --- a/go.sum +++ b/go.sum @@ -40,6 +40,8 @@ github.com/dghubble/oauth1 v0.7.0 h1:AlpZdbRiJM4XGHIlQ8BuJ/wlpGwFEJNnB4Mc+78tA/w github.com/dghubble/oauth1 v0.7.0/go.mod h1:8pFdfPkv/jr8mkChVbNVuJ0suiHe278BtWI4Tk1ujxk= github.com/dghubble/sling v1.3.0 h1:pZHjCJq4zJvc6qVQ5wN1jo5oNZlNE0+8T/h0XeXBUKU= github.com/dghubble/sling v1.3.0/go.mod h1:XXShWaBWKzNLhu2OxikSNFrlsvowtz4kyRuXUG7oQKY= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.0.0-rc1 h1:Mr8jIV7wDfLw5Fw6BPupm0aduTFdLjhI3wFuIIZKvO4= github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.0.0-rc1/go.mod h1:2s/IzRcxCszyNh760IjJiqoYHTnifk8ZeNYL33z8Pww= @@ -283,11 +285,14 @@ gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gorm.io/driver/mysql v1.0.5 h1:WAAmvLK2rG0tCOqrf5XcLi2QUwugd4rcVJ/W3aoon9o= +gorm.io/driver/mysql v1.0.5/go.mod h1:N1OIhHAIhx5SunkMGqWbGFVeh4yTNWKmMo1GOAsohLI= gorm.io/driver/postgres v1.0.8 h1:PAgM+PaHOSAeroTjHkCHCBIHHoBIf9RgPWGo8dF2DA8= gorm.io/driver/postgres v1.0.8/go.mod h1:4eOzrI1MUfm6ObJU/UcmbXyiHSs8jSwH95G5P5dxcAg= gorm.io/driver/sqlite v1.1.4 h1:PDzwYE+sI6De2+mxAneV9Xs11+ZyKV6oxD3wDGkaNvM= gorm.io/driver/sqlite v1.1.4/go.mod h1:mJCeTFr7+crvS+TRnWc5Z3UvwxUN1BGBLMrf5LA9DYw= gorm.io/gorm v1.20.7/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= -gorm.io/gorm v1.20.12 h1:ebZ5KrSHzet+sqOCVdH9mTjW91L298nX3v5lVxAzSUY= gorm.io/gorm v1.20.12/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= +gorm.io/gorm v1.21.3 h1:qDFi55ZOsjZTwk5eN+uhAmHi8GysJ/qCTichM/yO7ME= +gorm.io/gorm v1.21.3/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=