]> source.dussan.org Git - gitea.git/commitdiff
Add create repo feeds
authorUnknown <joe2010xtmf@163.com>
Thu, 13 Mar 2014 05:01:22 +0000 (01:01 -0400)
committerUnknown <joe2010xtmf@163.com>
Thu, 13 Mar 2014 05:01:22 +0000 (01:01 -0400)
gogs.go
models/action.go [new file with mode: 0644]
models/models.go
models/repo.go
models/user.go
modules/auth/auth.go
routers/user/user.go
web.go

diff --git a/gogs.go b/gogs.go
index cf097a3a0ff6d171d9b42bcb8e1929911cf05228..04db72a6616b773a042164e9e2f45aebfbd7d430 100644 (file)
--- a/gogs.go
+++ b/gogs.go
@@ -20,7 +20,7 @@ import (
 // Test that go1.1 tag above is included in builds. main.go refers to this definition.
 const go11tag = true
 
-const APP_VER = "0.0.5.0311"
+const APP_VER = "0.0.5.0313"
 
 func init() {
        runtime.GOMAXPROCS(runtime.NumCPU())
diff --git a/models/action.go b/models/action.go
new file mode 100644 (file)
index 0000000..cae093e
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2014 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package models
+
+import (
+       "encoding/json"
+       "time"
+)
+
+// Operation types of user action.
+const (
+       OP_CREATE_REPO = iota + 1
+       OP_DELETE_REPO
+       OP_STAR_REPO
+       OP_FOLLOW_REPO
+       OP_COMMIT_REPO
+       OP_PULL_REQUEST
+)
+
+// An Action represents
+type Action struct {
+       Id      int64
+       UserId  int64
+       OpType  int
+       RepoId  int64
+       Content string
+       Created time.Time `xorm:"created"`
+}
+
+type NewRepoContent struct {
+       UserName string
+       RepoName string
+}
+
+// NewRepoAction inserts action for create repository.
+func NewRepoAction(user *User, repo *Repository) error {
+       content, err := json.Marshal(&NewRepoContent{user.Name, repo.Name})
+       if err != nil {
+               return err
+       }
+       _, err = orm.InsertOne(&Action{
+               UserId:  user.Id,
+               OpType:  OP_CREATE_REPO,
+               RepoId:  repo.Id,
+               Content: string(content),
+       })
+       return err
+}
+
+func GetFeeds(userid, offset int64) ([]Action, error) {
+       actions := make([]Action, 0, 20)
+       err := orm.Limit(20, int(offset)).Desc("id").Where("user_id=?", userid).Find(&actions)
+       return actions, err
+}
index 413775f58bd6c78397329e856cedebf36daef1d0..7c28dc54224f543e841fa4a818f88b47b89e64a4 100644 (file)
@@ -92,7 +92,7 @@ func setEngine() {
 
 func init() {
        setEngine()
-       err := orm.Sync(new(User), new(PublicKey), new(Repository), new(Access))
+       err := orm.Sync(new(User), new(PublicKey), new(Repository), new(Access), new(Action))
        if err != nil {
                fmt.Printf("sync database struct error: %s\n", err)
                os.Exit(2)
index c790dc90a631956f7397c4144222de7eb3c51590..6387090ed00a0855c25a28720e0dcb815aa7f510 100644 (file)
@@ -137,7 +137,8 @@ func CreateRepository(user *User, repoName, desc, repoLang, license string, priv
                }
                return nil, err
        }
-       return repo, nil
+
+       return repo, NewRepoAction(user, repo)
 }
 
 // InitRepository initializes README and .gitignore if needed.
index 8fa2e44e009ae9273f745309bd28efe1f3e5654b..c59e4ae152a8a38893cd7257fe5371b9f581e596 100644 (file)
@@ -61,26 +61,6 @@ type Follow struct {
        Created  time.Time `xorm:"created"`
 }
 
-// Operation types of repository.
-const (
-       OP_CREATE_REPO = iota + 1
-       OP_DELETE_REPO
-       OP_STAR_REPO
-       OP_FOLLOW_REPO
-       OP_COMMIT_REPO
-       OP_PULL_REQUEST
-)
-
-// An Action represents
-type Action struct {
-       Id      int64
-       UserId  int64
-       OpType  int
-       RepoId  int64
-       Content string
-       Created time.Time `xorm:"created"`
-}
-
 var (
        ErrUserOwnRepos     = errors.New("User still have ownership of repositories")
        ErrUserAlreadyExist = errors.New("User already exist")
index b0855275549fc895f2b33b27009743966423d433..e4748650c28803637b54125b845cc282c803be0c 100644 (file)
@@ -90,6 +90,11 @@ func (f *LogInForm) Validate(errors *binding.Errors, req *http.Request, context
        validate(errors, data, f)
 }
 
+type FeedsForm struct {
+       UserId int64 `form:"userid" binding:"Required"`
+       Offset int64 `form:"offset"`
+}
+
 func getMinMaxSize(field reflect.StructField) string {
        for _, rule := range strings.Split(field.Tag.Get("binding"), ";") {
                if strings.HasPrefix(rule, "MinSize(") || strings.HasPrefix(rule, "MaxSize(") {
index 5017e878c687f12e7f3d59054a2ada53fb17c009..ae9dd902907e147b78233972804bbb7b396f23d3 100644 (file)
@@ -5,6 +5,7 @@
 package user
 
 import (
+       "bytes"
        "net/http"
 
        "github.com/codegangsta/martini"
@@ -140,7 +141,6 @@ func SignUp(form auth.RegisterForm, data base.TmplData, req *http.Request, r ren
        r.Redirect("/user/login")
 }
 
-// TODO: unfinished
 func Delete(data base.TmplData, req *http.Request, session sessions.Session, r render.Render) {
        data["Title"] = "Delete Account"
 
@@ -166,3 +166,21 @@ func Delete(data base.TmplData, req *http.Request, session sessions.Session, r r
 
        r.HTML(200, "user/delete", data)
 }
+
+func Feeds(form auth.FeedsForm, r render.Render) string {
+       actions, err := models.GetFeeds(form.UserId, form.Offset)
+       if err != nil {
+               return err.Error()
+       }
+
+       length := len(actions)
+       buf := bytes.NewBuffer([]byte("["))
+       for i, action := range actions {
+               buf.WriteString(action.Content)
+               if i < length-1 {
+                       buf.WriteString(",")
+               }
+       }
+       buf.WriteString("]")
+       return buf.String()
+}
diff --git a/web.go b/web.go
index 0b41a909d6834a64237f57e3129cca73082306a4..1f34891bc48de20c0d0c3b7341e7f37b758ad71b 100644 (file)
--- a/web.go
+++ b/web.go
@@ -64,18 +64,19 @@ func runWeb(*cli.Context) {
        m.Any("/user/logout", auth.SignInRequire(true), user.SignOut)
        m.Any("/user/sign_up", auth.SignOutRequire(), binding.BindIgnErr(auth.RegisterForm{}), user.SignUp)
        m.Any("/user/delete", auth.SignInRequire(true), user.Delete)
+       m.Get("/user/feeds", binding.Bind(auth.FeedsForm{}), user.Feeds)
 
        m.Any("/user/setting", auth.SignInRequire(true), user.Setting)
        m.Any("/user/setting/ssh", auth.SignInRequire(true), binding.BindIgnErr(auth.AddSSHKeyForm{}), user.SettingSSHKeys)
 
        m.Get("/user/:username", auth.SignInRequire(false), user.Profile)
 
-       m.Get("/:username/:reponame", repo.Repo)
-
        m.Any("/repo/create", auth.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create)
        m.Any("/repo/delete", auth.SignInRequire(true), repo.Delete)
        m.Any("/repo/list", auth.SignInRequire(false), repo.List)
 
+       m.Get("/:username/:reponame", repo.Repo)
+
        listenAddr := fmt.Sprintf("%s:%s",
                base.Cfg.MustValue("server", "HTTP_ADDR"),
                base.Cfg.MustValue("server", "HTTP_PORT", "3000"))