begin;

-- Создаем таблицу званий
create table ranks (id serial primary key, name varchar(32));

-- Создаем таблицу пользователей
create table users (id uuid primary key default gen_random_uuid(), name varchar(64), rank_id integer);

-- Привязываем users(rank_id) -> ranks(id)
alter table users add foreign key(rank_id) references ranks(id);

-- Заполняем звания
insert into ranks(name) values ('Рядовой');
insert into ranks(name) values ('Ефрейтор');
insert into ranks(name) values ('Младший сержант');
insert into ranks(name) values ('Сержант');
insert into ranks(name) values ('Старший сержант');
insert into ranks(name) values ('Старшина');
insert into ranks(name) values ('Прапорщик');
insert into ranks(name) values ('Старший прапорщик');
insert into ranks(name) values ('Младший лейтенант');
insert into ranks(name) values ('Лейтенант');
insert into ranks(name) values ('Старший лейтенант');
insert into ranks(name) values ('Капитан');
insert into ranks(name) values ('Майор');
insert into ranks(name) values ('Подполковник');
insert into ranks(name) values ('Полковник');
insert into ranks(name) values ('Генерал майор');
insert into ranks(name) values ('Генерал лейтенант');
insert into ranks(name) values ('Генерал полковник');
insert into ranks(name) values ('Генерал армии');
insert into ranks(name) values ('Маршал России');

-- Обновляем username(varchar) -> user_id(uuid) в measurement_batch
alter table measurement_batch rename column username to user_id;
alter table measurement_batch alter column user_id type uuid using null;

-- Привязываем measurement_batch(user_id) -> users(id)
alter table measurement_batch add foreign key(user_id) references users(id);

-- Заполняем тестовые данные:
-- -- Пользователь
insert into users(name, rank_id) values ('Левитан Всеволод Романович', (select id from ranks order by id desc limit 1));
-- -- Измерение
insert into measurement_batch(start_period, user_id, pos_x, pos_y) values (now(), (select id from users limit 1), 69.00, 42.00);

commit;


-- Проверяем
select batch.id, batch.start_period, concat(rnk.name, ' ', usr.name), batch.pos_x, batch.pos_y from measurement_batch batch join users usr on batch.user_id = usr.id join ranks rnk on usr.rank_id = rnk.id;
