mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-29 01:33:10 -06:00
* - Create CosmosDocument as a base class - Add CT and UT - Refactor all tables to use the CosmosDocument * - Add UpsertDocument method to perform updates in a generic way - Add SetUpdateTime() to update the UT for updates - Refactor it all * - Add Performquery method - Refactor appservice_events_table * - Update naffka Topics and Messages to use the common pattern * - Update keyserver to use the common pattern for collection and PK * - Update mediaapi to use the common pattern for collection and pk * - Update roomserver to use the common pattern for collectionname and pk * - Update signingkeyserver to use the common pattern for collectionname and pk * - Update userapi touse the common pattern for collectionname and pk * - Update partitionOffset to use the common collectionname and pk - Remove generic GetPartitionKey() method Co-authored-by: alexf@example.com <alexf@example.com>
42 lines
1.2 KiB
Go
42 lines
1.2 KiB
Go
package cosmosdbapi
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type CosmosDocument struct {
|
|
Id string `json:"id"`
|
|
Pk string `json:"_pk"`
|
|
Tn string `json:"_sid"`
|
|
Cn string `json:"_cn"`
|
|
Ct string `json:"_ct"`
|
|
Ut string `json:"_ut"`
|
|
ETag string `json:"_etag"`
|
|
Timestamp int64 `json:"_ts"`
|
|
}
|
|
|
|
func removeSpecialChars(docId string) string {
|
|
// The following characters are restricted and cannot be used in the Id property: '/', '\', '?', '#'
|
|
invalidChars := [4]string{"/", "\\", "?", "#"}
|
|
replaceChar := ","
|
|
result := docId
|
|
for _, invalidChar := range invalidChars {
|
|
result = strings.ReplaceAll(result, invalidChar, replaceChar)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func GetDocumentId(tenantName string, collectionName string, id string) string {
|
|
safeId := removeSpecialChars(id)
|
|
return fmt.Sprintf("%s,%s,%s", collectionName, tenantName, safeId)
|
|
}
|
|
|
|
func GetPartitionKeyByCollection(tenantName string, collectionName string) string {
|
|
return fmt.Sprintf("%s,%s", collectionName, tenantName)
|
|
}
|
|
|
|
func GetPartitionKeyByUniqueId(tenantName string, collectionName string, uniqueId string) string {
|
|
return fmt.Sprintf("%s,%s,%s", collectionName, tenantName, uniqueId)
|
|
}
|