dendrite/internal/cosmosdbapi/document.go
alexfca 927238a686
Use a common way to generate CollectionName and PartitionKey (#18)
* - 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>
2021-09-23 09:02:37 +10:00

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)
}