Selaa lähdekoodia

Add create repo feeds

Unknown 11 vuotta sitten
vanhempi
commit
6a75b1f7b3
8 muutettua tiedostoa jossa 87 lisäystä ja 26 poistoa
  1. 1 1
      gogs.go
  2. 56 0
      models/action.go
  3. 1 1
      models/models.go
  4. 2 1
      models/repo.go
  5. 0 20
      models/user.go
  6. 5 0
      modules/auth/auth.go
  7. 19 1
      routers/user/user.go
  8. 3 2
      web.go

+ 1 - 1
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())

+ 56 - 0
models/action.go

@@ -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
+}

+ 1 - 1
models/models.go

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

+ 2 - 1
models/repo.go

@@ -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.

+ 0 - 20
models/user.go

@@ -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")

+ 5 - 0
modules/auth/auth.go

@@ -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(") {

+ 19 - 1
routers/user/user.go

@@ -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()
+}

+ 3 - 2
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"))