dstotijn / go-notion

Go client for the Notion API.
MIT License
379 stars 40 forks source link

User object not being marshalled properly when trying to update a user in the People type DatabasePageProperty #54

Open mikimichaeli opened 5 months ago

mikimichaeli commented 5 months ago

Hi, great client!

When trying to update a People column in a database page (row), it seems that the User object is not being marshalled to the proper JSON object per the api.

Example usage of updating a page:

user := notion.User{BaseUser:  notion.BaseUser{ID: "<user-id>"}}
newPageProperties := notion.DatabasePageProperties{}
newPageProperties["Contributors"] = notion.DatabasePageProperty{People: []notion.User{user}}
res, err := n.Client.UpdatePage(ctx, "<page-id>", notion.UpdatePageParams{
        DatabasePageProperties: *newPageProperties,
})
if err != nil {
    fmt.Println(err)
}

The output error shows:

notion: failed to update page properties: body failed validation. Fix one:
body.properties.Contributors.people[0].type should be not present, instead was `""`.
body.properties.Contributors.people[0].name should be not present, instead was `""`.
body.properties.Contributors.people[0].avatar_url should be not present, instead was `""`.
body.properties.Contributors.people[0].person should be not present or an object, instead was `null`.
body.properties.Contributors.people[0].bot should be not present or an object, instead was `null`. (code: validation_error, status: 400)

from looking at the source code, I suspect the problem might be that the struct don't have an omitempty tag on their respective JSON representation. I'm happy to contribute an MR if needed

mikimichaeli commented 5 months ago

@dstotijn would appreciate your review 🙏🏼