init: create project
This commit is contained in:
274
server/service/result.go
Normal file
274
server/service/result.go
Normal file
@ -0,0 +1,274 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/kallydev/privacy/database"
|
||||
)
|
||||
|
||||
type Result interface {
|
||||
queryPhoneNumber(databases []database.Database, phoneNumber int64) error
|
||||
queryIDNumber(databases []database.Database, idNumber string) error
|
||||
queryQQNumber(databases []database.Database, qqNumber int64) error
|
||||
queryEmail(databases []database.Database, email string) error
|
||||
|
||||
addName(name string)
|
||||
addNickname(nickname string)
|
||||
addPhoneNumber(phoneNumber int64)
|
||||
addIDNumber(idNumber string)
|
||||
addQQNumber(qqNumber int64)
|
||||
addPassword(password string)
|
||||
addEmail(email string)
|
||||
addAddress(address string)
|
||||
}
|
||||
|
||||
var (
|
||||
_ Result = &QueryResult{}
|
||||
)
|
||||
|
||||
type QueryResult struct {
|
||||
Names map[Name]bool `json:"names"`
|
||||
Nicknames map[Nickname]bool `json:"nicknames"`
|
||||
PhoneNumbers map[PhoneNumber]bool `json:"phone_numbers"`
|
||||
IDNumbers map[IDNumber]bool `json:"id_numbers"`
|
||||
QQNumbers map[QQNumber]bool `json:"qq_numbers"`
|
||||
Passwords map[Password]bool `json:"passwords"`
|
||||
Emails map[Email]bool `json:"emails"`
|
||||
Addresses map[Address]bool `json:"addresses"`
|
||||
}
|
||||
|
||||
func NewQueryResult() *QueryResult {
|
||||
return &QueryResult{
|
||||
Names: make(map[Name]bool),
|
||||
Nicknames: make(map[Nickname]bool),
|
||||
PhoneNumbers: make(map[PhoneNumber]bool),
|
||||
IDNumbers: make(map[IDNumber]bool),
|
||||
QQNumbers: make(map[QQNumber]bool),
|
||||
Passwords: make(map[Password]bool),
|
||||
Emails: make(map[Email]bool),
|
||||
Addresses: make(map[Address]bool),
|
||||
}
|
||||
}
|
||||
|
||||
func (result *QueryResult) addModel(model database.Model) {
|
||||
if name, valid := model.GetName(); valid {
|
||||
result.addName(name)
|
||||
}
|
||||
if nickname, valid := model.GetNickname(); valid {
|
||||
result.addNickname(nickname)
|
||||
}
|
||||
if phoneNumber, valid := model.GetPhoneNumber(); valid {
|
||||
result.addPhoneNumber(phoneNumber)
|
||||
}
|
||||
if idNumber, valid := model.GetIDNumber(); valid {
|
||||
result.addIDNumber(idNumber)
|
||||
}
|
||||
if qqNumber, valid := model.GetQQNumber(); valid {
|
||||
result.addQQNumber(qqNumber)
|
||||
}
|
||||
if password, valid := model.GetPassword(); valid {
|
||||
result.addPassword(password)
|
||||
}
|
||||
if email, valid := model.GetEmail(); valid {
|
||||
result.addEmail(email)
|
||||
}
|
||||
if address, valid := model.GetAddress(); valid {
|
||||
result.addAddress(address)
|
||||
}
|
||||
}
|
||||
|
||||
func (result *QueryResult) queryPhoneNumber(databases []database.Database, phoneNumber int64) error {
|
||||
for _, db := range databases {
|
||||
models, err := db.QueryByPhoneNumber(context.Background(), phoneNumber)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, model := range models {
|
||||
result.addModel(model)
|
||||
}
|
||||
}
|
||||
result.PhoneNumbers[PhoneNumber(phoneNumber)] = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func (result *QueryResult) queryIDNumber(databases []database.Database, idNumber string) error {
|
||||
for _, db := range databases {
|
||||
models, err := db.QueryByIDNumber(context.Background(), idNumber)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, model := range models {
|
||||
result.addModel(model)
|
||||
}
|
||||
}
|
||||
result.IDNumbers[IDNumber(idNumber)] = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func (result *QueryResult) queryQQNumber(databases []database.Database, qqNumber int64) error {
|
||||
for _, db := range databases {
|
||||
models, err := db.QueryByQQNumber(context.Background(), qqNumber)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, model := range models {
|
||||
result.addModel(model)
|
||||
}
|
||||
}
|
||||
result.QQNumbers[QQNumber(qqNumber)] = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func (result *QueryResult) queryEmail(databases []database.Database, email string) error {
|
||||
for _, db := range databases {
|
||||
models, err := db.QueryByEmail(context.Background(), email)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, model := range models {
|
||||
result.addModel(model)
|
||||
}
|
||||
}
|
||||
result.Emails[Email(email)] = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func (result *QueryResult) addName(value string) {
|
||||
if value == "" {
|
||||
return
|
||||
}
|
||||
name := Name(value)
|
||||
if _, ok := result.Names[name]; !ok {
|
||||
result.Names[name] = false
|
||||
}
|
||||
}
|
||||
|
||||
func (result *QueryResult) addNickname(value string) {
|
||||
if value == "" {
|
||||
return
|
||||
}
|
||||
nickname := Nickname(value)
|
||||
if _, ok := result.Nicknames[nickname]; !ok {
|
||||
result.Nicknames[nickname] = false
|
||||
}
|
||||
}
|
||||
|
||||
func (result *QueryResult) addPhoneNumber(value int64) {
|
||||
if value == 0 {
|
||||
return
|
||||
}
|
||||
phoneNumber := PhoneNumber(value)
|
||||
if _, ok := result.PhoneNumbers[phoneNumber]; !ok {
|
||||
result.PhoneNumbers[phoneNumber] = false
|
||||
}
|
||||
}
|
||||
|
||||
func (result *QueryResult) addIDNumber(value string) {
|
||||
if value == "" {
|
||||
return
|
||||
}
|
||||
idNumber := IDNumber(value)
|
||||
if _, ok := result.IDNumbers[idNumber]; !ok {
|
||||
result.IDNumbers[idNumber] = false
|
||||
}
|
||||
}
|
||||
|
||||
func (result *QueryResult) addQQNumber(value int64) {
|
||||
if value == 0 {
|
||||
return
|
||||
}
|
||||
qqNumber := QQNumber(value)
|
||||
if _, ok := result.QQNumbers[qqNumber]; !ok {
|
||||
result.QQNumbers[qqNumber] = false
|
||||
}
|
||||
}
|
||||
|
||||
func (result *QueryResult) addPassword(value string) {
|
||||
if value == "" {
|
||||
return
|
||||
}
|
||||
password := Password(value)
|
||||
if _, ok := result.Passwords[password]; !ok {
|
||||
result.Passwords[password] = false
|
||||
}
|
||||
}
|
||||
|
||||
func (result *QueryResult) addEmail(value string) {
|
||||
if value == "" {
|
||||
return
|
||||
}
|
||||
email := Email(value)
|
||||
if _, ok := result.Emails[email]; !ok {
|
||||
result.Emails[email] = false
|
||||
}
|
||||
}
|
||||
|
||||
func (result *QueryResult) addAddress(value string) {
|
||||
if value == "" {
|
||||
return
|
||||
}
|
||||
address := Address(value)
|
||||
if _, ok := result.Addresses[address]; !ok {
|
||||
result.Addresses[address] = false
|
||||
}
|
||||
}
|
||||
|
||||
func (result *QueryResult) Build(mask bool) *QueryResponse {
|
||||
response := NewQueryResponse()
|
||||
for name := range result.Names {
|
||||
result := name.String()
|
||||
if mask {
|
||||
result = name.Masking()
|
||||
}
|
||||
response.Names = append(response.Names, result)
|
||||
}
|
||||
for nickname := range result.Nicknames {
|
||||
result := nickname.String()
|
||||
if mask {
|
||||
result = nickname.Masking()
|
||||
}
|
||||
response.Nicknames = append(response.Nicknames, result)
|
||||
}
|
||||
for phoneNumber := range result.PhoneNumbers {
|
||||
result := phoneNumber.String()
|
||||
if mask {
|
||||
result = phoneNumber.Masking()
|
||||
}
|
||||
response.PhoneNumbers = append(response.PhoneNumbers, result)
|
||||
}
|
||||
for idNumber := range result.IDNumbers {
|
||||
result := idNumber.String()
|
||||
if mask {
|
||||
result = idNumber.Masking()
|
||||
}
|
||||
response.IDNumbers = append(response.IDNumbers, result)
|
||||
}
|
||||
for qqNumber := range result.QQNumbers {
|
||||
result := qqNumber.String()
|
||||
if mask {
|
||||
result = qqNumber.Masking()
|
||||
}
|
||||
response.QQNumbers = append(response.QQNumbers, result)
|
||||
}
|
||||
for password := range result.Passwords {
|
||||
result := password.String()
|
||||
if mask {
|
||||
result = password.Masking()
|
||||
}
|
||||
response.Passwords = append(response.Passwords, result)
|
||||
}
|
||||
for email := range result.Emails {
|
||||
result := email.String()
|
||||
if mask {
|
||||
result = email.Masking()
|
||||
}
|
||||
response.Emails = append(response.Emails, result)
|
||||
}
|
||||
for address := range result.Addresses {
|
||||
result := address.String()
|
||||
if mask {
|
||||
result = address.Masking()
|
||||
}
|
||||
response.Addresses = append(response.Addresses, result)
|
||||
}
|
||||
return response
|
||||
}
|
Reference in New Issue
Block a user