63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package db
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"fmt"
 | |
| 	"log"
 | |
| 
 | |
| 	"github.com/jackc/pgx/v5/pgxpool"
 | |
| )
 | |
| 
 | |
| // db connection info
 | |
| // !MIGHT CHANGE
 | |
| const (
 | |
| 	host     = "localhost"
 | |
| 	port     = 5432
 | |
| 	user     = "asdfuser"
 | |
| 	password = "asdfpassword"
 | |
| 	dbname   = "asdfdb"
 | |
| )
 | |
| 
 | |
| var DbPool *pgxpool.Pool
 | |
| var allowedUsernames map[string]bool
 | |
| 
 | |
| // initialize connection to db
 | |
| func ConnectToDb() (*pgxpool.Pool, error) {
 | |
| 	// this server is intended to be ran on the same system as the db
 | |
| 	dbUrl := fmt.Sprintf("postgresql://%s:%s@%s:%d/%s", user, password, host, port, dbname)
 | |
| 	config, err := pgxpool.ParseConfig((dbUrl))
 | |
| 	if err != nil {
 | |
| 		return nil, fmt.Errorf("unable to parse data URL: %w", err)
 | |
| 	}
 | |
| 
 | |
| 	pool, err := pgxpool.NewWithConfig(context.Background(), config)
 | |
| 	if err != nil {
 | |
| 		return nil, fmt.Errorf("unable to create connection pool: %w", err)
 | |
| 	}
 | |
| 
 | |
| 	log.Println("Connected to DB :)")
 | |
| 	return pool, nil
 | |
| }
 | |
| 
 | |
| // fetch existing usernames from db
 | |
| func FetchUsernames() (map[string]bool, error) {
 | |
| 	usernames := make(map[string]bool)
 | |
| 
 | |
| 	rows, err := DbPool.Query(context.Background(), "SELECT username FROM users")
 | |
| 	if err != nil {
 | |
| 		return nil, fmt.Errorf("error querying users: %w", err)
 | |
| 	}
 | |
| 	defer rows.Close()
 | |
| 
 | |
| 	for rows.Next() {
 | |
| 		var username string
 | |
| 		if err := rows.Scan(&username); err != nil {
 | |
| 			return nil, fmt.Errorf("error scanning username: %w", err)
 | |
| 		}
 | |
| 		usernames[username] = true
 | |
| 	}
 | |
| 
 | |
| 	log.Println("Fetched usernames:", usernames)
 | |
| 	return usernames, nil
 | |
| }
 |