project list added
This commit is contained in:
parent
4b97954e19
commit
68a8ddd5c6
1
go.mod
1
go.mod
@ -4,6 +4,7 @@ go 1.22.2
|
||||
|
||||
require (
|
||||
entgo.io/ent v0.13.1
|
||||
github.com/delaneyj/gomponents-iconify v0.0.20231025
|
||||
github.com/joho/godotenv v1.5.1
|
||||
github.com/lib/pq v1.10.9
|
||||
github.com/maragudk/gomponents v0.20.2
|
||||
|
||||
2
go.sum
2
go.sum
@ -10,6 +10,8 @@ github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew
|
||||
github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/delaneyj/gomponents-iconify v0.0.20231025 h1:GJU/KtZGoQ7CwIumei/fNITpMk0f0p7yYz4q/AVllss=
|
||||
github.com/delaneyj/gomponents-iconify v0.0.20231025/go.mod h1:ZjIP4npWKmVuJbvSjBTpzSl1QMimELl77gP/leg1bnI=
|
||||
github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNPXu/4=
|
||||
github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4=
|
||||
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
|
||||
|
||||
32
go.work.sum
32
go.work.sum
@ -2,8 +2,16 @@ github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3 h1:ZSTrOEhi
|
||||
github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=
|
||||
github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw=
|
||||
github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo=
|
||||
github.com/delaneyj/toolbelt v0.0.0-20230611200251-2df076bd1579 h1:lj+zHpYT5Xv69ZsEB6eTm1nZ/5S0NmwPip5zG8kO234=
|
||||
github.com/delaneyj/toolbelt v0.0.0-20230611200251-2df076bd1579/go.mod h1:XPp3P/k7PF1+gU3tFzemCcoIlJl45pRP2uIQ96pxBDQ=
|
||||
github.com/divan/num2words v0.0.0-20170904212200-57dba452f942 h1:fJ8/Lid8fF4i7Bwl7vWKvG2KeZzr3yU4qG6h/DPdXLU=
|
||||
github.com/divan/num2words v0.0.0-20170904212200-57dba452f942/go.mod h1:K88GQWK1aAiPMo9q2LZwyKBfEGnge7kmVVTUcZ61HSc=
|
||||
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
|
||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s=
|
||||
github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
||||
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
|
||||
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
||||
@ -11,12 +19,16 @@ github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWS
|
||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/hashicorp/hcl/v2 v2.13.0/go.mod h1:e4z5nxYlWNPdDSNYX+ph14EvWYMFm3eP0zIUqPc2jr0=
|
||||
github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0=
|
||||
github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
|
||||
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc=
|
||||
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
|
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
|
||||
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||
@ -27,12 +39,18 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
||||
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||
github.com/smartystreets/goconvey v1.8.0 h1:Oi49ha/2MURE0WexF052Z0m+BNSGirfjg5RL+JXWq3w=
|
||||
github.com/smartystreets/goconvey v1.8.0/go.mod h1:EdX8jtrTIj26jmjCOVNMVSIYAtgexqXKHOXW2Dx9JLg=
|
||||
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
|
||||
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||
github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU=
|
||||
github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc=
|
||||
github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
|
||||
@ -57,4 +75,18 @@ golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
|
||||
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
|
||||
golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ=
|
||||
golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg=
|
||||
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
|
||||
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg=
|
||||
k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E=
|
||||
modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY=
|
||||
modernc.org/libc v1.22.3/go.mod h1:MQrloYP209xa2zHome2a8HLiLm6k0UT8CoHpV74tOFw=
|
||||
modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
|
||||
modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
|
||||
modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds=
|
||||
modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
|
||||
modernc.org/sqlite v1.21.1 h1:GyDFqNnESLOhwwDRaHGdp2jKLDzpyT/rNLglX3ZkMSU=
|
||||
modernc.org/sqlite v1.21.1/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI=
|
||||
zombiezen.com/go/sqlite v0.13.0 h1:iEeyVqcm3fk5PCA8OQBhBxPnqrP4yYuVJBF+XZpSnOE=
|
||||
zombiezen.com/go/sqlite v0.13.0/go.mod h1:Ht/5Rg3Ae2hoyh1I7gbWtWAl89CNocfqeb/aAMTkJr4=
|
||||
|
||||
22
web/assets/json/projects.json
Normal file
22
web/assets/json/projects.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"projects": [
|
||||
{
|
||||
"Name": "Portfolio",
|
||||
"Url": "https://github.com/DariusKlein/portfolio",
|
||||
"Description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam gravida, ante scelerisque ultrices condimentum, mi lacus ornare justo, ac elementum tellus leo sed erat. Sed euismod turpis eu viverra lacinia. Maecenas laoreet diam sed urna porttitor posuere ac eu mauris. Vestibulum blandit magna enim, sed ultricies sapien rutrum convallis. Nullam id posuere enim. Maecenas sed aliquam lorem. Praesent vitae ligula et nisl venenatis finibus. Vivamus auctor aliquet libero, at ornare lorem. Maecenas odio augue, tincidunt ut quam in, vestibulum malesuada nulla. Integer fringilla orci et ipsum commodo, id commodo metus bibendum. Proin volutpat lectus turpis, ut finibus eros blandit eu. Quisque sed libero ac ligula dapibus dignissim. Quisque vitae arcu a orci suscipit hendrerit. Duis ac tellus vel mi blandit consequat eget non ligula. Aliquam quis luctus nisl, eu mattis nulla. Sed sem turpis, malesuada id ex non, placerat aliquet tellus.",
|
||||
"image_url": "https://bulma.io/assets/images/placeholders/96x96.png"
|
||||
},
|
||||
{
|
||||
"Name": "Discord bot",
|
||||
"Url": "https://github.com/DariusKlein/kleincordBot",
|
||||
"Description": "Maecenas dictum eu neque sit amet ullamcorper. Maecenas venenatis porttitor sapien, et dapibus justo. Maecenas facilisis suscipit erat. Nulla placerat nibh tortor, ac eleifend enim mollis et. In fermentum lacus malesuada convallis sollicitudin. Nunc accumsan fermentum venenatis. Cras vel elit eu nibh euismod scelerisque. Sed efficitur turpis mi, vel viverra arcu accumsan id. Nunc venenatis ex et arcu posuere mollis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam tortor nisl, vestibulum vel feugiat a, egestas ut massa. Donec sagittis purus eu ornare bibendum. Morbi interdum arcu et aliquam pulvinar. Phasellus et augue feugiat, gravida felis ut, consectetur velit.",
|
||||
"image_url": "https://bulma.io/assets/images/placeholders/96x96.png"
|
||||
},
|
||||
{
|
||||
"Name": "Wazuh notifier",
|
||||
"Url": "https://github.com/RudiKlein/wazuh-notifier",
|
||||
"Description": "Proin sollicitudin hendrerit dolor ut venenatis. Etiam quis elit turpis. Maecenas imperdiet sapien a lorem finibus feugiat. Aenean quis faucibus quam. Donec eu libero ut lectus tempus tempus. Maecenas et imperdiet quam. Donec ligula lacus, hendrerit facilisis ornare nec, varius ac dolor. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam efficitur, nunc eget mollis tristique, eros mi varius mauris, quis cursus nisi justo ac nisl. Nullam eget laoreet dui. Phasellus placerat, nibh a euismod maximus, turpis odio bibendum mi, sed imperdiet justo lacus volutpat augue. Mauris rutrum orci at libero interdum gravida. In eget commodo elit. Mauris nec felis augue. Aenean nec orci turpis.",
|
||||
"image_url": "https://bulma.io/assets/images/placeholders/96x96.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -12,24 +12,24 @@ func Navbar() g.Node {
|
||||
e.AriaLabel("main navigation"),
|
||||
b.NavbarBrand(
|
||||
b.NavbarAHref(
|
||||
"https://bulma.io",
|
||||
"/",
|
||||
e.ImgSrc(
|
||||
"https://bulma.io/assets/images/bulma-logo.png",
|
||||
e.Width("112"), e.Height("28"),
|
||||
"/assets/images/favicon.ico",
|
||||
),
|
||||
),
|
||||
),
|
||||
b.NavbarStart(
|
||||
b.NavbarAHref("#", "Home"),
|
||||
b.NavbarAHref("#", "Documentation"),
|
||||
b.NavbarAHref("/", "Home"),
|
||||
b.NavbarAHref("/about", "Wie ben ik"),
|
||||
b.NavbarAHref("/projects", "projecten"),
|
||||
b.NavbarDropdown(
|
||||
"More",
|
||||
"placeholder",
|
||||
b.Hoverable,
|
||||
b.NavbarAHref("#", "About"),
|
||||
b.NavbarAHref("#", "Jobs"),
|
||||
b.NavbarAHref("#", "Contact"),
|
||||
b.NavbarAHref("#1", "item 1"),
|
||||
b.NavbarAHref("#2", "item 2"),
|
||||
b.NavbarAHref("#3", "item 3"),
|
||||
b.NavbarDivider(),
|
||||
b.NavbarAHref("#", "Report an issue"),
|
||||
b.NavbarAHref("#4", "divided item"),
|
||||
),
|
||||
),
|
||||
b.NavbarEnd(
|
||||
@ -37,10 +37,6 @@ func Navbar() g.Node {
|
||||
b.Buttons(
|
||||
b.ButtonA(
|
||||
b.Primary,
|
||||
e.Strong("Sign up"),
|
||||
),
|
||||
b.ButtonA(
|
||||
b.Light,
|
||||
"Log in",
|
||||
),
|
||||
),
|
||||
|
||||
@ -1,30 +1,36 @@
|
||||
package components
|
||||
|
||||
import (
|
||||
"github.com/delaneyj/gomponents-iconify/iconify/mdi"
|
||||
g "github.com/maragudk/gomponents"
|
||||
c "github.com/maragudk/gomponents/components"
|
||||
. "github.com/maragudk/gomponents/html"
|
||||
b "github.com/willoma/bulma-gomponents"
|
||||
e "github.com/willoma/gomplements"
|
||||
"portfolio/web/types"
|
||||
)
|
||||
|
||||
func ProjectList(projects []types.Project) g.Node {
|
||||
return Nav(Class("bg-gray-700 mb-4"),
|
||||
container(
|
||||
Div(Class("flex items-center space-x-4 h-16"),
|
||||
// We can Map custom slices to Nodes
|
||||
g.Group(g.Map(projects, func(p types.Project) g.Node {
|
||||
return Div(Class("py-2 px-2"), g.Group(g.Map(projects, func(p types.Project) g.Node {
|
||||
return Project(p)
|
||||
})),
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
func Project(project types.Project) g.Node {
|
||||
return A(g.Text(project.Name),
|
||||
// Apply CSS classes conditionally
|
||||
c.Classes{
|
||||
"px-3 py-2 rounded-md text-sm font-medium focus:outline-none focus:text-white focus:bg-gray-700": true,
|
||||
},
|
||||
return b.Card(
|
||||
b.Media(
|
||||
b.MediaLeft(
|
||||
b.ImageImg(
|
||||
project.ImageUrl,
|
||||
e.Alt("project image"),
|
||||
b.ImgSq64,
|
||||
),
|
||||
),
|
||||
b.Title(4, project.Name),
|
||||
b.Subtitle(6, A(Class("flex"), Href(project.Url), mdi.Github(), g.Text("checkout repo"))),
|
||||
),
|
||||
b.Content(
|
||||
project.Description,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@ -4,7 +4,7 @@ import (
|
||||
g "github.com/maragudk/gomponents"
|
||||
"net/http"
|
||||
"portfolio/web/components"
|
||||
"portfolio/web/types"
|
||||
"portfolio/web/services"
|
||||
)
|
||||
|
||||
func ProjectPageHandler(w http.ResponseWriter, r *http.Request) {
|
||||
@ -20,8 +20,6 @@ func createProjectBody(w http.ResponseWriter, r *http.Request) []g.Node {
|
||||
|
||||
return []g.Node{
|
||||
components.Navbar(),
|
||||
components.ProjectList([]types.Project{
|
||||
{Name: "test", Url: "test", Description: "test", ImageUrl: "test"},
|
||||
}),
|
||||
components.ProjectList(services.ReadProjectsJson()),
|
||||
}
|
||||
}
|
||||
|
||||
28
web/services/projectsJson.go
Normal file
28
web/services/projectsJson.go
Normal file
@ -0,0 +1,28 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"portfolio/web/types"
|
||||
)
|
||||
|
||||
func ReadProjectsJson() []types.Project {
|
||||
// Open our jsonFile
|
||||
jsonFile, err := os.Open("web/assets/json/projects.json")
|
||||
// if we os.Open returns an error then handle it
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
defer jsonFile.Close()
|
||||
|
||||
byteValue, _ := io.ReadAll(jsonFile)
|
||||
|
||||
var projects types.Projects
|
||||
|
||||
json.Unmarshal(byteValue, &projects)
|
||||
|
||||
return projects.Projects
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
package types
|
||||
|
||||
type Projects struct {
|
||||
projects []Project
|
||||
Projects []Project `json:"projects"`
|
||||
}
|
||||
|
||||
type Project struct {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user