diff --git a/make/migrations/postgresql/0004_add_robot_account.up.sql b/make/migrations/postgresql/0004_add_robot_account.up.sql new file mode 100644 index 000000000..8255b3788 --- /dev/null +++ b/make/migrations/postgresql/0004_add_robot_account.up.sql @@ -0,0 +1,16 @@ +CREATE TABLE robot ( + id SERIAL PRIMARY KEY NOT NULL, + name varchar(255), + /* + The maximum length of token is 7k +*/ + token varchar(7168), + description varchar(1024), + project_id int, + disabled boolean DEFAULT false NOT NULL, + creation_time timestamp default CURRENT_TIMESTAMP, + update_time timestamp default CURRENT_TIMESTAMP, + CONSTRAINT unique_robot UNIQUE (name, project_id) +); + +CREATE TRIGGER robot_update_time_at_modtime BEFORE UPDATE ON robot FOR EACH ROW EXECUTE PROCEDURE update_update_time_at_column(); \ No newline at end of file diff --git a/src/common/models/base.go b/src/common/models/base.go index e7d08daeb..2faeb0a1a 100644 --- a/src/common/models/base.go +++ b/src/common/models/base.go @@ -37,5 +37,6 @@ func init() { new(ResourceLabel), new(UserGroup), new(AdminJob), - new(JobLog)) + new(JobLog), + new(Robot)) } diff --git a/src/common/models/robot.go b/src/common/models/robot.go new file mode 100644 index 000000000..202089dec --- /dev/null +++ b/src/common/models/robot.go @@ -0,0 +1,47 @@ +// Copyright Project Harbor Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package models + +import ( + "time" +) + +// RobotTable is the name of table in DB that holds the robot object +const RobotTable = "robot" + +// Robot holds the details of a robot. +type Robot struct { + ID int64 `orm:"pk;auto;column(id)" json:"id"` + Name string `orm:"column(name)" json:"name"` + Token string `orm:"column(token)" json:"token"` + Description string `orm:"column(description)" json:"description"` + ProjectID int64 `orm:"column(project_id)" json:"project_id"` + Disabled bool `orm:"column(disabled)" json:"disabled"` + CreationTime time.Time `orm:"column(creation_time);auto_now_add" json:"creation_time"` + UpdateTime time.Time `orm:"column(update_time);auto_now" json:"update_time"` +} + +// RobotQuery ... +type RobotQuery struct { + Name string + ProjectID int64 + Disabled bool + Pagination +} + +// TableName ... +func (u *Robot) TableName() string { + return RobotTable +}