remake in Golang
This commit is contained in:
198
api/ops/member.go
Normal file
198
api/ops/member.go
Normal file
@@ -0,0 +1,198 @@
|
||||
package ops
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"gitea.iceberg-gaming.com/17th-Ranger-Battalion-ORG/17th-UnitTracker-API/db"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
"gopkg.in/guregu/null.v3"
|
||||
)
|
||||
|
||||
/*
|
||||
|
||||
DDL
|
||||
|
||||
CREATE TABLE `members` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(100) NOT NULL,
|
||||
`timezone` varchar(5) DEFAULT NULL,
|
||||
`email` varchar(100) DEFAULT NULL,
|
||||
`website` varchar(240) DEFAULT NULL,
|
||||
`guilded_id` varchar(10) DEFAULT NULL,
|
||||
`steam_id_64` varchar(17) DEFAULT NULL,
|
||||
`teamspeak_uid` varchar(32) DEFAULT NULL,
|
||||
`steam_profile_name` varchar(32) DEFAULT NULL,
|
||||
`discord_id` varchar(20) DEFAULT NULL,
|
||||
`discord_username` varchar(32) DEFAULT NULL,
|
||||
`aliases` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`aliases`)),
|
||||
`created_at` datetime NOT NULL DEFAULT current_timestamp(),
|
||||
`updated_at` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
`deleted` tinyint(4) DEFAULT NULL,
|
||||
`remarks` text DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name` (`name`),
|
||||
UNIQUE KEY `steamId64` (`steam_id_64`) USING BTREE,
|
||||
UNIQUE KEY `discordId` (`discord_id`) USING BTREE,
|
||||
UNIQUE KEY `guilded_id` (`guilded_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=186 DEFAULT CHARSET=utf8mb4;
|
||||
*/
|
||||
|
||||
// Member is a struct that represents a member
|
||||
type Member struct {
|
||||
ID int `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Timezone null.String `json:"timezone"`
|
||||
Email null.String `json:"email"`
|
||||
Website null.String `json:"website"`
|
||||
GuildedID null.String `json:"guilded_id"`
|
||||
SteamID64 null.String `json:"steam_id_64"`
|
||||
TeamspeakUID null.String `json:"teamspeak_uid"`
|
||||
SteamProfileName null.String `json:"steam_profile_name"`
|
||||
DiscordID null.String `json:"discord_id"`
|
||||
DiscordUsername null.String `json:"discord_username"`
|
||||
Aliases null.String `json:"aliases"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
Deleted null.Int `json:"deleted"`
|
||||
Remarks null.String `json:"remarks"`
|
||||
}
|
||||
|
||||
/*
|
||||
DDL
|
||||
|
||||
CREATE TABLE `members` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(100) NOT NULL,
|
||||
`timezone` varchar(5) DEFAULT NULL,
|
||||
`email` varchar(100) DEFAULT NULL,
|
||||
`website` varchar(240) DEFAULT NULL,
|
||||
`guilded_id` varchar(10) DEFAULT NULL,
|
||||
`steam_id_64` varchar(17) DEFAULT NULL,
|
||||
`teamspeak_uid` varchar(32) DEFAULT NULL,
|
||||
`steam_profile_name` varchar(32) DEFAULT NULL,
|
||||
`discord_id` varchar(20) DEFAULT NULL,
|
||||
`discord_username` varchar(32) DEFAULT NULL,
|
||||
`aliases` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`aliases`)),
|
||||
`created_at` datetime NOT NULL DEFAULT current_timestamp(),
|
||||
`updated_at` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
`deleted` tinyint(4) DEFAULT NULL,
|
||||
`remarks` text DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name` (`name`),
|
||||
UNIQUE KEY `steamId64` (`steam_id_64`) USING BTREE,
|
||||
UNIQUE KEY `discordId` (`discord_id`) USING BTREE,
|
||||
UNIQUE KEY `guilded_id` (`guilded_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=186 DEFAULT CHARSET=utf8mb4;
|
||||
*/
|
||||
|
||||
// GetMembers returns a list of all members
|
||||
func GetMembers(c echo.Context) error {
|
||||
|
||||
members := []Member{}
|
||||
|
||||
ctx, cancel := context.WithTimeout(
|
||||
context.Background(),
|
||||
2*time.Second,
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
rows, err := db.ActiveDB.QueryContext(
|
||||
ctx,
|
||||
"SELECT * FROM members",
|
||||
)
|
||||
if err != nil {
|
||||
return c.JSON(500, map[string]interface{}{
|
||||
"error": err.Error(),
|
||||
})
|
||||
}
|
||||
if ctx.Err() == context.DeadlineExceeded {
|
||||
return c.JSON(500, map[string]interface{}{
|
||||
"error": "request timed out",
|
||||
})
|
||||
}
|
||||
|
||||
// scan the rows into the members slice
|
||||
for rows.Next() {
|
||||
var m Member
|
||||
err = rows.Scan(
|
||||
&m.ID,
|
||||
&m.Name,
|
||||
&m.Timezone,
|
||||
&m.Email,
|
||||
&m.Website,
|
||||
&m.GuildedID,
|
||||
&m.SteamID64,
|
||||
&m.TeamspeakUID,
|
||||
&m.SteamProfileName,
|
||||
&m.DiscordID,
|
||||
&m.DiscordUsername,
|
||||
&m.Aliases,
|
||||
&m.CreatedAt,
|
||||
&m.UpdatedAt,
|
||||
&m.Deleted,
|
||||
&m.Remarks,
|
||||
)
|
||||
if err != nil {
|
||||
return c.JSON(500, map[string]interface{}{
|
||||
"error": err.Error(),
|
||||
})
|
||||
}
|
||||
members = append(members, m)
|
||||
}
|
||||
|
||||
return c.JSON(200, members)
|
||||
}
|
||||
|
||||
// GetMember returns a single member by ID
|
||||
func GetMember(c echo.Context) error {
|
||||
id := c.Param("id")
|
||||
|
||||
if id == "" {
|
||||
return fmt.Errorf("id is required")
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(
|
||||
context.Background(),
|
||||
2*time.Second,
|
||||
)
|
||||
defer cancel()
|
||||
|
||||
returnMember := Member{}
|
||||
err := db.ActiveDB.QueryRowContext(
|
||||
ctx,
|
||||
"SELECT * FROM members WHERE id = ?",
|
||||
id,
|
||||
).Scan(
|
||||
&returnMember.ID,
|
||||
&returnMember.Name,
|
||||
&returnMember.Timezone,
|
||||
&returnMember.Email,
|
||||
&returnMember.Website,
|
||||
&returnMember.GuildedID,
|
||||
&returnMember.SteamID64,
|
||||
&returnMember.TeamspeakUID,
|
||||
&returnMember.SteamProfileName,
|
||||
&returnMember.DiscordID,
|
||||
&returnMember.DiscordUsername,
|
||||
&returnMember.Aliases,
|
||||
&returnMember.CreatedAt,
|
||||
&returnMember.UpdatedAt,
|
||||
&returnMember.Deleted,
|
||||
&returnMember.Remarks,
|
||||
)
|
||||
if err != nil {
|
||||
return c.JSON(500, map[string]interface{}{
|
||||
"error": err.Error(),
|
||||
})
|
||||
}
|
||||
if ctx.Err() == context.DeadlineExceeded {
|
||||
return c.JSON(500, map[string]interface{}{
|
||||
"error": "request timed out",
|
||||
})
|
||||
}
|
||||
|
||||
return c.JSON(200, returnMember)
|
||||
}
|
||||
Reference in New Issue
Block a user