功能修改
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
package repo
|
||||
|
||||
import (
|
||||
"sort"
|
||||
|
||||
"browser.local/platform/domain"
|
||||
)
|
||||
|
||||
type memoryGameClientBridgeCommandRepository struct {
|
||||
*memoryRepository[domain.GameClientBridgeCommand, domain.GameClientBridgeCommandFilter]
|
||||
}
|
||||
|
||||
func newMemoryGameClientBridgeCommandRepository() *memoryGameClientBridgeCommandRepository {
|
||||
return &memoryGameClientBridgeCommandRepository{memoryRepository: newMemoryRepository(
|
||||
func(command domain.GameClientBridgeCommand) string { return command.ID },
|
||||
domain.CopyGameClientBridgeCommand,
|
||||
matchGameClientBridgeCommand,
|
||||
)}
|
||||
}
|
||||
|
||||
func (repository *memoryGameClientBridgeCommandRepository) GetByIdempotency(serverInstanceID, requesterID, commandType, idempotencyKey string) (domain.GameClientBridgeCommand, error) {
|
||||
values, err := repository.List(domain.GameClientBridgeCommandFilter{ServerInstanceID: serverInstanceID, RequesterID: requesterID, CommandType: commandType, IdempotencyKey: idempotencyKey})
|
||||
if err != nil {
|
||||
return domain.GameClientBridgeCommand{}, err
|
||||
}
|
||||
if len(values) == 0 {
|
||||
return domain.GameClientBridgeCommand{}, ErrNotFound
|
||||
}
|
||||
return values[0], nil
|
||||
}
|
||||
|
||||
type persistentGameClientBridgeCommandRepository struct {
|
||||
*persistentRepository[domain.GameClientBridgeCommand, domain.GameClientBridgeCommandFilter]
|
||||
repository GameClientBridgeCommandRepository
|
||||
}
|
||||
|
||||
func (repository *persistentGameClientBridgeCommandRepository) GetByIdempotency(serverInstanceID, requesterID, commandType, idempotencyKey string) (domain.GameClientBridgeCommand, error) {
|
||||
return repository.repository.GetByIdempotency(serverInstanceID, requesterID, commandType, idempotencyKey)
|
||||
}
|
||||
|
||||
type memoryGameClientBridgeSnapshotRepository struct {
|
||||
*memoryRepository[domain.GameClientBridgeSnapshot, domain.GameClientBridgeSnapshotFilter]
|
||||
}
|
||||
|
||||
func newMemoryGameClientBridgeSnapshotRepository() *memoryGameClientBridgeSnapshotRepository {
|
||||
return &memoryGameClientBridgeSnapshotRepository{memoryRepository: newMemoryRepository(
|
||||
func(snapshot domain.GameClientBridgeSnapshot) string { return snapshot.ID },
|
||||
domain.CopyGameClientBridgeSnapshot,
|
||||
matchGameClientBridgeSnapshot,
|
||||
)}
|
||||
}
|
||||
|
||||
func (repository *memoryGameClientBridgeSnapshotRepository) List(filter domain.GameClientBridgeSnapshotFilter) ([]domain.GameClientBridgeSnapshot, error) {
|
||||
limit := filter.Limit
|
||||
filter.Limit = 0
|
||||
values, err := repository.memoryRepository.List(filter)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
sort.SliceStable(values, func(left, right int) bool {
|
||||
if !values[left].ObservedAt.Equal(values[right].ObservedAt) {
|
||||
return values[left].ObservedAt.After(values[right].ObservedAt)
|
||||
}
|
||||
if values[left].Sequence != values[right].Sequence {
|
||||
return values[left].Sequence > values[right].Sequence
|
||||
}
|
||||
return values[left].ID < values[right].ID
|
||||
})
|
||||
if limit > 0 && len(values) > limit {
|
||||
values = values[:limit]
|
||||
}
|
||||
return values, nil
|
||||
}
|
||||
Reference in New Issue
Block a user