Browse Source

Add create repo feeds

tags/v1.2.0-rc1
Unknown 11 years ago
parent
commit
6a75b1f7b3
8 changed files with 87 additions and 26 deletions
  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 View File

@@ -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 View File

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


+ 2
- 1
models/repo.go View 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.


+ 0
- 20
models/user.go View 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")


+ 5
- 0
modules/auth/auth.go View 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(") {


+ 19
- 1
routers/user/user.go View 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()
}

+ 3
- 2
web.go View File

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


Loading…
Cancel
Save