Skip to content

Commit d182dcd

Browse files
authored
Merge pull request #2 from jiaozifs/feat/init_project
Feat/init project
2 parents a6f9f0c + 1011513 commit d182dcd

34 files changed

+2517
-24
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
*.dll
88
*.so
99
*.dylib
10+
jiaozifs
11+
jzfs
1012

1113
# goland
1214
*.idea

LICENSE

Lines changed: 0 additions & 21 deletions
This file was deleted.

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,18 @@
11
# jiaozifs
22
version control file system.
3+
4+
## quick start
5+
6+
build
7+
```bash
8+
git clone https://github.com/jiaozifs/jiaozifs.git
9+
make build
10+
```
11+
12+
init and running
13+
```bash
14+
./jzfs init --db postgres://li:li123@localhost:5432/jiaozifs?sslmode=disable
15+
16+
./jzfs daemon
17+
```
18+

api/api_impl/common.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package api_impl
2+
3+
import (
4+
"github.com/jiaozifs/jiaozifs/api"
5+
"github.com/jiaozifs/jiaozifs/version"
6+
"go.uber.org/fx"
7+
"net/http"
8+
)
9+
10+
var _ api.ServerInterface = (*APIController)(nil)
11+
12+
type APIController struct {
13+
fx.In
14+
}
15+
16+
func (A APIController) GetVersion(w *api.JiaozifsResponse, r *http.Request) {
17+
swagger, err := api.GetSwagger()
18+
if err != nil {
19+
w.RespError(err)
20+
return
21+
}
22+
23+
w.RespJSON(api.VersionResult{
24+
ApiVersion: swagger.Info.Version,
25+
Version: version.UserVersion(),
26+
})
27+
}

api/api_impl/server.go

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package api_impl
2+
3+
import (
4+
"context"
5+
"errors"
6+
"github.com/getkin/kin-openapi/openapi3filter"
7+
"github.com/go-chi/chi/v5"
8+
"github.com/go-chi/cors"
9+
logging "github.com/ipfs/go-log/v2"
10+
"github.com/jiaozifs/jiaozifs/api"
11+
"github.com/jiaozifs/jiaozifs/config"
12+
middleware "github.com/oapi-codegen/nethttp-middleware"
13+
"go.uber.org/fx"
14+
"net"
15+
"net/http"
16+
"net/url"
17+
)
18+
19+
var log = logging.Logger("rpc")
20+
21+
const APIV1Prefix = "/api/v1"
22+
23+
func SetupAPI(lc fx.Lifecycle, apiConfig *config.APIConfig, controller APIController) error {
24+
swagger, err := api.GetSwagger()
25+
if err != nil {
26+
return err
27+
}
28+
29+
// Clear out the servers array in the swagger spec, that skips validating
30+
// that server names match. We don't know how this thing will be run.
31+
swagger.Servers = nil
32+
// This is how you set up a basic chi router
33+
r := chi.NewRouter()
34+
35+
// Use our validation middleware to check all requests against the
36+
// OpenAPI schema.
37+
r.Use(
38+
cors.Handler(cors.Options{
39+
// Basic CORS
40+
// for more ideas, see: https://developer.github.com/v3/#cross-origin-resource-sharing
41+
42+
// AllowedOrigins: []string{"https://foo.com"}, // Use this to allow specific origin hosts
43+
AllowedOrigins: []string{"https://*", "http://*"},
44+
// AllowOriginFunc: func(r *http.Request, origin string) bool { return true },
45+
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
46+
AllowedHeaders: []string{"*"},
47+
ExposedHeaders: []string{"*"},
48+
AllowCredentials: false,
49+
MaxAge: 300, // Maximum value not ignored by any of major browsers
50+
}),
51+
52+
middleware.OapiRequestValidatorWithOptions(swagger, &middleware.Options{
53+
Options: openapi3filter.Options{
54+
AuthenticationFunc: func(ctx context.Context, input *openapi3filter.AuthenticationInput) error {
55+
return nil
56+
},
57+
},
58+
}),
59+
)
60+
61+
api.HandlerFromMuxWithBaseURL(controller, r, APIV1Prefix)
62+
63+
url, err := url.Parse(apiConfig.Listen)
64+
if err != nil {
65+
return err
66+
}
67+
68+
listener, err := net.Listen("tcp", url.Host)
69+
if err != nil {
70+
return err
71+
}
72+
log.Infof("Start listen api %s", listener.Addr())
73+
go func() {
74+
err := http.Serve(listener, r)
75+
if err != nil && !errors.Is(err, http.ErrServerClosed) {
76+
log.Errorf("listen address fail %s", err)
77+
}
78+
}()
79+
80+
lc.Append(fx.Hook{
81+
OnStop: func(ctx context.Context) error {
82+
return listener.Close()
83+
},
84+
})
85+
return nil
86+
}

api/api_impl/utils.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package api_impl
2+
3+
import (
4+
"encoding/json"
5+
"net/http"
6+
)
7+
8+
func writeJson(w http.ResponseWriter, v interface{}) {
9+
data, err := json.Marshal(v)
10+
if err != nil {
11+
writeError(w, err)
12+
return
13+
}
14+
w.Header().Set("Content-Type", "application/json")
15+
w.WriteHeader(http.StatusOK)
16+
_, _ = w.Write(data)
17+
}
18+
19+
func writeError(w http.ResponseWriter, err error) {
20+
w.WriteHeader(http.StatusOK)
21+
w.Write([]byte(err.Error()))
22+
}

api/custom_response.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package api
2+
3+
import (
4+
"encoding/json"
5+
"net/http"
6+
)
7+
8+
type JiaozifsResponse struct {
9+
http.ResponseWriter
10+
}
11+
12+
func (response *JiaozifsResponse) RespJSON(v interface{}) {
13+
data, err := json.Marshal(v)
14+
if err != nil {
15+
response.RespError(err)
16+
return
17+
}
18+
response.Header().Set("Content-Type", "application/json")
19+
response.WriteHeader(http.StatusOK)
20+
_, _ = response.Write(data)
21+
}
22+
23+
func (response *JiaozifsResponse) RespError(err error) {
24+
response.WriteHeader(http.StatusOK)
25+
response.Write([]byte(err.Error()))
26+
}

api/docs.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// Package apigen provides generated code for our OpenAPI
2+
package api
3+
4+
//go:generate go run github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen -package api -templates ./tmpls -generate "types,client,chi-server,spec" -o jiaozifs.gen.go ./swagger.yml

0 commit comments

Comments
 (0)