Commit 2c5eadbf authored by Andrei Mihu's avatar Andrei Mihu
Browse files

Improve metadata handling and tests

parent e48702d3
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -255,8 +255,8 @@ func GroupsUpdate(logger *zap.Logger, db *sql.DB, caller uuid.UUID, updates []*T

		groupLogger := logger.With(zap.String("group_id", groupID.String()))

		statements := make([]string, 6)
		params := make([]interface{}, 7)
		statements := make([]string, 5)
		params := make([]interface{}, 6)

		params[0] = groupID.Bytes()

@@ -272,17 +272,19 @@ func GroupsUpdate(logger *zap.Logger, db *sql.DB, caller uuid.UUID, updates []*T
		statements[3] = "lang = $5"
		params[4] = g.Lang

		statements[4] = "metadata = $6"
		params[5] = g.Metadata

		statements[5] = "state = $7"
		params[6] = 0
		statements[4] = "state = $6"
		params[5] = 0
		if g.Private {
			params[6] = 1
			params[5] = 1
		}

		if len(g.Metadata) != 0 {
			statements = append(statements, fmt.Sprintf("metadata = $%v", len(params)+1))
			params = append(params, g.Metadata)
		}

		if g.Name != "" {
			statements = append(statements, "name = $8")
			statements = append(statements, fmt.Sprintf("name = $%v", len(params)+1))
			params = append(params, g.Name)
		}

+3 −3
Original line number Diff line number Diff line
@@ -25,16 +25,16 @@ import (
	"go.uber.org/zap"
)

func leaderboardCreate(logger *zap.Logger, db *sql.DB, id, sortOrder, resetSchedule, metadata string, authoritative bool) ([]byte, error) {
func leaderboardCreate(logger *zap.Logger, db *sql.DB, id []byte, sortOrder, resetSchedule, metadata string, authoritative bool) ([]byte, error) {
	query := `INSERT INTO leaderboard (id, authoritative, sort_order, reset_schedule, metadata)
	VALUES ($1, $2, $3, $4, $5)`
	params := []interface{}{}

	// ID.
	if id == "" {
	if len(id) == 0 {
		params = append(params, uuid.NewV4().Bytes())
	} else {
		params = append(params, []byte(id))
		params = append(params, id)
	}

	// Authoritative.
+10 −11
Original line number Diff line number Diff line
@@ -1273,12 +1273,6 @@ func (n *NakamaModule) leaderboardCreate(l *lua.LState) int {
	metadata := l.OptTable(4, l.NewTable())
	authoritative := l.OptBool(5, false)

	leaderboardId, err := uuid.FromString(id)
	if err != nil {
		l.ArgError(1, "invalid leaderboard id")
		return 0
	}

	if sort != "asc" && sort != "desc" {
		l.ArgError(2, "invalid sort - only acceptable values are 'asc' and 'desc'")
		return 0
@@ -1291,7 +1285,7 @@ func (n *NakamaModule) leaderboardCreate(l *lua.LState) int {
		return 0
	}

	_, err = leaderboardCreate(n.logger, n.db, leaderboardId.String(), sort, reset, string(metadataBytes), authoritative)
	_, err = leaderboardCreate(n.logger, n.db, []byte(id), sort, reset, string(metadataBytes), authoritative)
	if err != nil {
		l.RaiseError(fmt.Sprintf("failed to create leaderboard: %s", err.Error()))
		return 0
@@ -1334,13 +1328,13 @@ func (n *NakamaModule) leaderboardSubmit(l *lua.LState, op string) int {
	metadataMap := ConvertLuaTable(metadata)
	metadataBytes, err := json.Marshal(metadataMap)
	if err != nil {
		l.RaiseError(fmt.Sprintf("failed to convert metadata: %s", err.Error()))
		l.RaiseError(fmt.Sprintf("failed to convert leaderboard record metadata: %s", err.Error()))
		return 0
	}

	record, err := leaderboardSubmit(n.logger, n.db, uuid.Nil, []byte(leaderboardID), ownerID, handle, lang, op, value, location, timezone, metadataBytes)
	if err != nil {
		l.RaiseError(fmt.Sprintf("failed to create leaderboard: %s", err.Error()))
		l.RaiseError(fmt.Sprintf("failed to submit leaderboard record: %s", err.Error()))
		return 0
	}

@@ -1351,7 +1345,7 @@ func (n *NakamaModule) leaderboardSubmit(l *lua.LState, op string) int {
	outgoingMetadataMap := make(map[string]interface{})
	err = json.Unmarshal(record.Metadata, &outgoingMetadataMap)
	if err != nil {
		l.RaiseError(fmt.Sprintf("failed to convert metadata to json: %s", err.Error()))
		l.RaiseError(fmt.Sprintf("failed to convert leaderboard record metadata to json: %s", err.Error()))
		return 0
	}

@@ -1451,7 +1445,7 @@ func (n *NakamaModule) groupsCreate(l *lua.LState) int {
			}
		})

		// mandatory items
		// Check mandatory items.
		if p.Name == "" {
			conversionError = true
			l.ArgError(1, "missing group Name")
@@ -1462,6 +1456,11 @@ func (n *NakamaModule) groupsCreate(l *lua.LState) int {
			return
		}

		// Set defaults if the values are missing.
		if len(p.Metadata) == 0 {
			p.Metadata = []byte("{}")
		}

		groupParams = append(groupParams, p)
	})

+11 −1
Original line number Diff line number Diff line
@@ -62,7 +62,14 @@ end

-- leaderboard_create
do
  local status, res = pcall(nk.leaderboard_submit_set, "ce042d38-c3db-4ebd-bc99-3aaa0adbdef7", 10, "4c2ae592-b2a7-445e-98ec-697694478b1c", "02ebb2c8")
  local id = nk.uuid_v4()
  local status, res = pcall(nk.leaderboard_create, id, "desc", "0 0 * * 1", {}, true)
  if not status then
    print(res)
  end
  assert(status == true)

  local status, res = pcall(nk.leaderboard_submit_set, id, 10, "4c2ae592-b2a7-445e-98ec-697694478b1c", "02ebb2c8")
  if not status then
    print(res)
  end
@@ -150,6 +157,9 @@ do
  assert(status_update == true)

  local status_list, res_list = pcall(nk.groups_user_list, user_id)
  if not status_list then
    print(res_list)
  end
  assert(status_list == true)
  assert(#res_list == 1)
  assert(res_list[1].Group.Name == updated_group_name)