diff --git a/nzx_tmpmail/storage/redis.go b/nzx_tmpmail/storage/redis.go index 7e51e7c..347cd7b 100644 --- a/nzx_tmpmail/storage/redis.go +++ b/nzx_tmpmail/storage/redis.go @@ -24,41 +24,49 @@ type MailClient struct { } func GetMailClient(ctx context.Context, id string) (MailClient, error) { - var m MailClient - b, err := rdb.Get(ctx, "mailclient:"+id).Bytes() + k := "mailclient:" + id + ":mails" + it, err := rdb.LRange(ctx, k, 0, -1).Result() if err != nil { - return m, err + return MailClient{}, err } - err = json.Unmarshal(b, &m) - return m, err + m := MailClient{ + Name: id, + Mail: make([]Mail, 0, len(it)), + } + + for _, i := range it { + var mail Mail + if err := json.Unmarshal([]byte(i), &mail); err != nil { + return MailClient{}, err + } + + m.Mail = append(m.Mail, mail) + } + + return m, nil } func NewMail(ctx context.Context, rcp string, from string, rawdata string) error { - m, err := GetMailClient(ctx, rcp) - if err != nil { - m = MailClient{ - Name: rcp, - Mail: []Mail{}, - } - } - - m.Mail = append(m.Mail, Mail{ + m := Mail{ From: from, To: rcp, RawData: rawdata, - }) + } b, err := json.Marshal(m) if err != nil { return err } - if err := rdb.Set(ctx, "mailclient:"+rcp, b, time.Minute*10).Err(); err != nil { - return err - } + k := "maiclient:" + rcp + ":mails" + pipe := rdb.TxPipeline() + pipe.RPush(ctx, k, b) + pipe.Expire(ctx, k, time.Minute*10) - return nil + _, err = pipe.Exec(ctx) + + return err } func RedisInit() {