This commit is contained in:
cdle
2021-09-27 09:51:18 +08:00
parent 70d98c4566
commit 13d58917a5
2 changed files with 85 additions and 2 deletions
+44
View File
@@ -1,7 +1,9 @@
package core
import (
"encoding/json"
"fmt"
"reflect"
"strconv"
"github.com/boltdb/bolt"
@@ -118,3 +120,45 @@ var Int = func(s string) int {
i, _ := strconv.Atoi(s)
return i
}
func (bucket Bucket) Create(i interface{}) error {
s := reflect.ValueOf(i).Elem()
id := s.FieldByName("ID")
return db.Update(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(bucket))
if b == nil {
b, _ = tx.CreateBucket([]byte(bucket))
}
sq, _ := b.NextSequence()
id.SetInt(int64(sq))
buf, err := json.Marshal(i)
if err != nil {
return err
}
return b.Put(itob(sq), buf)
})
}
func itob(i uint64) []byte {
return []byte(fmt.Sprint(i))
}
func (bucket Bucket) First(i interface{}) {
id := reflect.ValueOf(i).Elem().FieldByName("ID").Int()
db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(bucket))
if b == nil {
return nil
}
data := b.Get(itob(uint64(id)))
if len(data) == 0 {
return nil
}
json.Unmarshal(data, i)
return nil
})
}
// func (bucket Bucket) Find(o interface{}) {
// }
+41 -2
View File
@@ -1,13 +1,52 @@
package dwz
import (
"fmt"
"net/http"
"github.com/cdle/sillyGirl/core"
"github.com/gin-gonic/gin"
)
var dwz = core.NewBucket("dwz")
func init() {
core.Server.GET("/dwz", func(c *gin.Context) {
addr := c.Param("addr")
c.String(200, addr)
url := c.Query("url")
dwz := getDwz(url)
c.String(200, dwz)
})
core.Server.GET("/d:id", func(c *gin.Context) {
id := c.Param("id")
c.Redirect(http.StatusMovedPermanently, getWz(id))
})
core.AddCommand("", []core.Function{
{
Rules: []string{"dwz ?"},
Handle: func(s core.Sender) interface{} {
return getDwz(s.Get())
},
},
})
}
type ShortUrl struct {
ID int
Url string
}
func getDwz(url string) string {
su := &ShortUrl{
Url: url,
}
dwz.Create(su)
return dwz.Get("address", "https://4co.cc"+"/d"+fmt.Sprint(su.ID))
}
func getWz(id string) string {
su := &ShortUrl{
ID: core.Int(id),
}
dwz.First(su)
return fmt.Sprint(su.Url)
}