Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Класс, который хранит в себе данные о заказе (https://javascript.ru/forum/misc/84200-klass-kotoryjj-khranit-v-sebe-dannye-o-zakaze.html)

NovichokJS 04.07.2022 21:03

Класс, который хранит в себе данные о заказе
 
Помогите плз. Как сделать корректно чтобы при создании заказа генерировался id заказа и чтобы логика метода confirmOrder и метода isValidType была корректной?
Метод confirmOrder должен проставлять ордер в статус confirmed = true (если заказ не был подтвержден раньше) и дату конфирма ставить в текущую.
Метод isValidType должен принимать только два значения Buy, Sell - метод возвращает true, если это требование выполняется, и false если нет.
Мой код:

class Order {
  confirmed = false;
  id = Math.floor(Math.random() * 100);
  dateCreated = new Date();
  dateConfirmed;
  constructor(price, city, type) {
    this.price = price;
    this.city = city;
    this.type = type;
  }
  checkPrice() {
    if (this.price > 1000) {
      return true;
    }
    return false;
  }
  confirmOrder() {
    if (this.confirmed == false) {
      this.confirmed = true;
    }

    this.dateConfirmed = new Date();
  }

  isValidType() {
    if (this.type == false) {
      return 'Buy';
    }
    return 'Sell';
  }
}

рони 04.07.2022 21:23

NovichokJS,
:-?
confirmOrder() {
    if (!this.confirmed) {
    this.confirmed = true;
    this.dateConfirmed = new Date();
      }
  }

  isValidType() {
     return ['Sell', 'Buy'].includes(this.type);
  }

NovichokJS 04.07.2022 21:32

спасибо, а как корректно id заказа прикрутить в код? то, что я написал id = Math.floor(Math.random() * 100); - это неверно. Это должен быть наверно рандомное число от 1 до бесконечности и чтобы при новом заказе id не повторился

voraa 04.07.2022 21:42

Цитата:

Сообщение от NovichokJS
спасибо, а как корректно id заказа прикрутить в код? то, что я написал id = Math.floor(Math.random() * 100); - это неверно. Это должен быть наверно рандомное число от 1 до бесконечности и чтобы при новом заказе id не повторился

Можно использовать Date.now(); - У всех заказов, поступивших не в одну и ту же милисекунду будет разный id. Если есть вероятность, что в одну ms поступит несколько заказов, тогда
Date.now()*100 + Math.floor(Math.random() * 100)

рони 04.07.2022 21:45

Цитата:

Сообщение от NovichokJS
чтобы при новом заказе id не повторился

сделайте счётчик или так ...
id = self.crypto.randomUUID();

NovichokJS 04.07.2022 22:09

Цитата:

Сообщение от рони (Сообщение 546461)
сделайте счётчик или так ...
id = self.crypto.randomUUID();

ого, такого я не проходил еще. А вот так корректно? или как лучше?

class Order {
  confirmed = false;
  dateCreated = new Date();
  dateConfirmed;
  id;
  constructor(price, city, type) {
    this.price = price;
    this.city = city;
    this.type = type;
  }
  checkPrice() {
    if (this.price > 1000) {
      return true;
    }
    return false;
  }
  confirmOrder() {
    if (!this.confirmed) {
      this.confirmed = true;
      this.dateConfirmed = new Date();
      this.id = Math.floor(Math.random() * 100);
    }
  }

  isValidType() {
    return ['Sell', 'Buy'].includes(this.type);
  }
}

рони 04.07.2022 22:22

NovichokJS,
вам виднее когда нужен id

рони 04.07.2022 22:26

NovichokJS,
let count = 0;
class Order {
  confirmed = false;
  dateCreated = new Date();
  dateConfirmed;
  id = count++;

NovichokJS 04.07.2022 22:44

Цитата:

Сообщение от рони (Сообщение 546464)
NovichokJS,
let count = 0;
class Order {
  confirmed = false;
  dateCreated = new Date();
  dateConfirmed;
  id = count++;

Нужно в рамках класса. Как правильно вообще сгенерировать рандомно id при создании заказа? и чтобы у него был тип данных String?

рони 05.07.2022 00:03

Цитата:

Сообщение от NovichokJS
чтобы у него был тип данных String?

:-?
alert(typeof self.crypto.randomUUID() );

voraa 05.07.2022 09:44

Цитата:

Сообщение от рони
crypto.randomUUID()

Оно, конечно хорошо, но уж больно новый API.
В сафари появился в марте 2022, а в Хроме и Файрфоксе в июле 2021.
Я такие новые не рискую использовать. Полно еще не обновленных браузеров, особенно Сафари.

Я бы пока через Date.now() делал.

voraa 05.07.2022 10:14

Цитата:

Сообщение от NovichokJS
Как правильно вообще сгенерировать рандомно id при создании заказа?

Не понятна цель этой работы. Если это какое то учебное задание, то можно разные варианты использовать. Если это что то производственное, то наверняка есть сервер, где хранятся и обрабатываются заказы. Вот он и должен присваивать идентификатор заказу. Потому, как есть вероятность, что клиенты пришлют ему заказы с одинаковым id. Ведь клиенты ничего не знают друг о друге. Кроме того, номер заказа должен быть легко читаемым человеком, например, что бы назвать его при получении или обращении в службу поддержки.
(В этом случае и randomUUID не годится)

NovichokJS 05.07.2022 14:56

разобрался уже, спасибо. Это просто в учебных пока целях. Сделал так id = Math.random().toString(36).substring(7);


Часовой пояс GMT +3, время: 21:51.