APIToken CreateAPIToken(APIToken APIToken, NpgsqlConnection connection)
        {
            if (string.IsNullOrEmpty(APIToken.Token))
            {
                APIToken.CreateToken(_tokenSize);
            }

            string insertOrUpdate =
                "INSERT INTO APIToken (account, channel, token, description, canread, canwrite, validfrom) " +
                "VALUES(@account, @channel, @token, @description, @canread, @canwrite, @validfrom) " +
                "RETURNING *;";

            return(connection.Query <APIToken>(insertOrUpdate,
                                               new
            {
                account = APIToken.Account,
                channel = APIToken.Channel,
                token = APIToken.Token,
                description = APIToken.Description,
                canread = APIToken.CanRead,
                canwrite = APIToken.CanWrite,
                validfrom = DateTime.UtcNow
            }
                                               ).Single());
        }
        public APIToken CreateAPIToken(APIToken APIToken)
        {
            if (string.IsNullOrEmpty(APIToken.Token))
            {
                APIToken.CreateToken(_tokenSize);
            }

            using var connection = GetNpgsqlConnection();
            connection.Open();

            using NpgsqlTransaction transaction = connection.BeginTransaction();

            string insertOrUpdate =
                "INSERT INTO APIToken (account, channel, token, description, canread, canwrite, validfrom) " +
                "VALUES(@account, @channel, @token, @description, @canread, @canwrite, @validfrom) " +
                "RETURNING *;";

            var createdAPIToken = connection.Query <APIToken>(insertOrUpdate,
                                                              new
            {
                account     = APIToken.Account,
                channel     = APIToken.Channel,
                token       = APIToken.Token,
                description = APIToken.Description,
                canread     = APIToken.CanRead,
                canwrite    = APIToken.CanWrite,
                validfrom   = DateTime.UtcNow
            }
                                                              ).Single();

            transaction.Commit();
            return(createdAPIToken);
        }